Ak to dokážeme v Perle, bolo by to v poriadkutiež. Neviem, či je to dokonca možné, ale to je to, čo chcem byť schopný urobiť. Snažím sa získať percento využitej pamäte (môžu byť lepšie spôsoby, ako to urobiť, dajte mi vedieť)
Mám tento bash príkaz
free -m | grep "Mem: " | awk "{print ($3/$2)*100}"
Toto vráti číslo, ale chcem urobiť nastavenú premennú na výstup príkazu.
So var1= Output of the above command
odpovede:
5 pre odpoveď č. 1Verím, že toto je to, čo hľadáte:
var1=$(free -m | grep "Mem: " | awk "{print ($3/$2)*100}")
vysvetlenie:
- Na
$(...)
Syntax sa nazýva nahradenie príkazu v prostredí shellu. - Spúšťa podshell, aby vykonal čokoľvek, čo je v zátvorkách, a potom vráti všetko vytlačené
stdout
v rámci tejto podshell.
stranou:
Alternatívna syntax je s backticks:
var1=`free -m | grep "Mem: " | awk "{print ($3/$2)*100}")`
ale nejde o uprednostňovanú metódu kvôli problémom s čitateľnosťou a hniezdením.
4 pre odpoveď č. 2
Nepotrebujete ju používať grep
, ak používate awk
, Svoj príkaz môžete zjednodušiť na:
var1=$(free -m | awk "/Mem:/{print ($3/$2)*100}")
0 pre odpoveď č. 3
Na príkaz môžete použiť backticks:
export var=`command`
0 pre odpoveď č. 4
Ak používate Linux (alebo akýkoľvek Unix s kompatibilným / proc rozhraním), môžete získať% využitej pamäte týmto spôsobom:
var1=$(perl -ne "/(w+):s*(d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * $mem{MemFree} / $mem{MemTotal}" /proc/meminfo)
Všimnite si, že je zvyčajne dobré odpočítať vyrovnávaciu pamäť a vyrovnávaciu pamäť (ukladanie do vyrovnávacej pamäte systému zvyčajne zaplňuje všetku dostupnú pamäť 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)