1

これをPerlで実行できれば、それでも問題ありません。これが可能かどうかはわかりませんが、これが私がやりたいことです。使用されているメモリのメモリパーセンテージを取得しようとしています(これを行うためのより良い方法があるかもしれません、私に知らせてください)

私はこのbashコマンドを持っています

free -m | grep "Mem: " | awk '{print ($3/$2)*100}' 

これは数値を返しますが、私がやりたいのは、コマンドの出力に変数を設定することです。

So var1= Output of the above command
4

4 に答える 4

5

これがあなたが探しているものだと思います:

var1=$(free -m | grep "Mem: " | awk '{print ($3/$2)*100}')

説明:

  • この$(...)構文は、シェルではコマンド置換と呼ばれます。
  • 括弧内にあるものを実行するサブシェルを生成し、stdoutそのサブシェル内に出力されたものを返します。

余談:

別の構文は、バッククォートを使用したものです。

var1=`free -m | grep "Mem: " | awk '{print ($3/$2)*100}')`

ただし、読みやすさとネストの問題があるため、推奨される方法ではありません。

于 2012-11-19T16:28:02.297 に答える
4

grepを使用している場合は、使用する必要はありませんawk。コマンドを次のように簡略化できます。

var1=$(free -m | awk '/Mem:/{print ($3/$2)*100}')
于 2012-11-19T16:35:41.397 に答える
0

コマンドでバッククォートを使用できます。

export var=`command`
于 2012-11-19T16:29:37.730 に答える
0

Linux (または互換性のある /proc インターフェイスを持つ任意の Unix) を使用している場合は、次の方法で使用済みメモリの割合を取得できます。

var1=$(perl -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * $mem{MemFree} / $mem{MemTotal}' /proc/meminfo)

一般に、バッファとキャッシュを差し引くことをお勧めします (OS キャッシュは、使用可能なすべての RAM をいっぱいにする傾向があります)。

var2=$(perl -MList::Util=sum -ne '/(\w+):\s*(\d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * sum(@mem{qw{Buffers Cached MemFree}}) / $mem{MemTotal}' /proc/meminfo)
于 2012-11-26T19:37:47.527 に答える