Якщо ми зможемо виконати це в 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)