2013-09-04 4 views
2

Я пишу маленький geeklet для geektool, чтобы предупредить меня, когда сумма неактивной и свободной RAM на моем Mac станет медленной. Я не очень хорош с bash, поэтому у меня проблема с окончательным выходом (получение пустого). Вот код:Bash bc и команды эха

inMem=$(top -l 1|awk '/PhysMem/ {print $6}'|sed s/M//) | freeMem=$(top -l 1|awk '/PhysMem/ {print $10}'|sed s/M//) | totalMem=$inMem+$freeMem | bc | echo $totalMem 

Интересно также, если мой вопрос является оптимальным или нет. Большое спасибо.

+0

Нет команды 'free' в OSX? –

+0

@SeanBright: нет. – geoffspear

+0

На OS X вам будет лучше запросить 'sysctl -a vm' –

ответ

2

Интересно, если это действительно может упростить ваши команды. Я не могу проверить это, так как я не на OSX, но надеюсь, что это сработает.

read inMem freeMem totalMem < <(top -l 1 | awk '/PhysMem/ { i = $6; sub(/M/, "", i); f = $10; sub(/M/, "", f); printf("%d %d %d\n", i, f, i + f); exit; }') 
echo "inMem: $inMem" 
echo "freeMem: $freeMem" 
echo "totalMem: $totalMem" 
+0

+1 для общего подхода, хотя его все равно можно упростить, если вам не нужно иметь значения в переменных оболочки. – tripleee

+0

@tripleee Моя первоначальная версия была на самом деле только самой командой, не отображающей значения для 'inMem' и' freeMem', но я не могу обобщить то, что действительно хочет OP. – konsolebox

+1

О, я имею в виду просто 'top -l 1 | awk '... END {print "inMem:" i; print "freeMem:" f; print "totalMem:" i + f} '' – tripleee

-1

Вместо синтаксического анализа top используйте файл /proc/meminfo. Например, с:

$ head -2 /proc/meminfo 
MemTotal:  4061696 kB 
MemFree:   335064 kB 

вы можете увидеть в общей и свободной памяти

+1

OSX не имеет procfs. –

-1

user000001 answer прав, но тогда возникает вопрос: «Как получить /proc/meminfo выход в переменные?»

Вы можете использовать это чистое решение Баш для синтаксического анализа:

read -d '' _ memTotal _ _ memFree _ < <(head -2 /proc/meminfo) 
+2

Единственное, что есть здесь, заключается в том, что при условии, что расположение позиций к требуемым переменным небезопасно, не читая их имена - будущие ядра могут изменять порядок при добавлении новых значений. –

+0

OS X не имеет/proc/meminfo – chepner