如果我們可以在Perl中執行此操作也可以。 我不知道這是否可能,但這是我想要做的。我想獲得的內存的內存百分比正在使用(有可能是這樣做的更好的方法,請讓我知道)設置一個Bash命令返回爲變量
我有這樣的bash命令
free -m | grep "Mem: " | awk '{print ($3/$2)*100}'
這將返回一個數字,但我想要做的是爲命令的輸出設置一個變量。
So var1= Output of the above command
如果我們可以在Perl中執行此操作也可以。 我不知道這是否可能,但這是我想要做的。我想獲得的內存的內存百分比正在使用(有可能是這樣做的更好的方法,請讓我知道)設置一個Bash命令返回爲變量
我有這樣的bash命令
free -m | grep "Mem: " | awk '{print ($3/$2)*100}'
這將返回一個數字,但我想要做的是爲命令的輸出設置一個變量。
So var1= Output of the above command
我相信這是你在找什麼:
var1=$(free -m | grep "Mem: " | awk '{print ($3/$2)*100}')
說明:在外殼
$(...)
語法稱爲命令替換。stdout
。旁白:
替代語法與反引號:
var1=`free -m | grep "Mem: " | awk '{print ($3/$2)*100}')`
,但它不是由於可讀性和嵌套問題的首選方法。
你並不需要使用grep
,如果您正在使用awk
。您可以簡化您的命令:
var1=$(free -m | awk '/Mem:/{print ($3/$2)*100}')
好抓! +1 =) –
如果你使用的是Linux(或者任何Unix兼容的/ proc接口),你可以使用的內存%這樣:
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)
謝謝,這正是我一直在尋找。我忘了在命令前添加「$」。我把括號括起來,但沒有$。再次感謝。 – jenglee
@jenglee:很高興幫助=) –