私たちがPerlでこれを実行できるなら、それはうまくいくでしょう同様に。 私はこれが可能であるかどうかは知りませんが、これが私ができることを望んでいることです。私は、使用されているメモリのメモリパーセンテージを取得しようとしています(これを行うより良い方法があります。
私はこのbashコマンドを持っている
free -m | grep "Mem: " | awk "{print ($3/$2)*100}"
これは数値を返しますが、私がしたいのは、コマンドの出力に変数を設定することです。
So var1= Output of the above command
回答:
回答№1は5私はこれがあなたが探しているものだと信じています:
var1=$(free -m | grep "Mem: " | awk "{print ($3/$2)*100}")
説明:
- ザ
$(...)
構文はシェルのコマンド置換と呼ばれます。 - それは、括弧の中にあるものを実行するためのサブシェルを生成し、次に出力されたものを返します。
stdout
そのサブシェル内にある。
脇に:
代わりの構文はバックティックである:
var1=`free -m | grep "Mem: " | awk "{print ($3/$2)*100}")`
可読性と入れ子の問題のために推奨される方法ではありません。
回答№2については4
あなたは使用する必要はありません grep
、あなたが使用している場合 awk
。次のようにコマンドを単純化することができます。
var1=$(free -m | awk "/Mem:/{print ($3/$2)*100}")
回答№3の場合は0
コマンドでバッククォートを使用することができます:
export var=`command`
回答№4の場合は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)