/ / Bashコマンドの戻り値を変数として設定する - perl、bash

bashコマンドの戻り値を変数として設定する - perl、bash

私たちが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)