/ / Nastaviť návrat príkazu Bash ako premennú - perl, bash

Nastavte príkaz Bash Return ako premennú - perl, bash

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ď č. 1

Verí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)