/ / Встановити Bash Command Return як змінну - perl, bash

Встановити повернення команди Bash як змінну - perl, bash

Якщо ми зможемо виконати це в Perl, було б добретак само. Я не знаю, чи це можливо, але це те, що я хочу вміти. Я намагаюся отримати відсоток пам'яті, що використовується (Можливо, є кращі способи зробити це, будь ласка, дайте мені знати)

У мене є ця команда bash

free -m | grep "Mem: " | awk "{print ($3/$2)*100}"

Це поверне число, але те, що я хочу зробити, це встановити змінну на висновок команди.

So var1= Output of the above command

Відповіді:

5 за відповідь № 1

Я вважаю, що це те, що ви шукаєте:

var1=$(free -m | grep "Mem: " | awk "{print ($3/$2)*100}")

Пояснення:

  • The $(...) синтаксисом називається заміна команди в оболонці.
  • Він породжує доподібну частину для виконання всього, що знаходиться в круглих дужках, а потім повертає все, що було надруковано stdout в межах цього підгрупа.

Вбік:

Альтернативний синтаксис - із зворотними посиланнями:

var1=`free -m | grep "Mem: " | awk "{print ($3/$2)*100}")`

але це не є кращим методом через проблеми читабельності та вкладеності.


4 для відповіді № 2

Вам не потрібно користуватися grep, якщо ви використовуєте awk. Ви можете спростити свою команду до:

var1=$(free -m | awk "/Mem:/{print ($3/$2)*100}")

0 для відповіді № 3

Ви можете використовувати зворотні посилання для команди:

export var=`command`

0 для відповіді № 4

Якщо ви використовуєте Linux (або будь-який Unix із сумісним / proc інтерфейсом), ви можете отримати% використовуваної пам'яті таким чином:

var1=$(perl -ne "/(w+):s*(d+)/ and ($mem{$1} = $2) }{ printf "%0.2f", 100 - 100 * $mem{MemFree} / $mem{MemTotal}" /proc/meminfo)

Зауважте, що загалом є хорошою ідеєю відняти буфери та кеш (кешування ОС має тенденцію заповнювати всю наявну оперативну пам’ять):

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)