Команда чтения Bash и stdin перенаправление

Вы могли суммировать столбцы использования с awk:

ps --no-headers -u $USER -o pcpu,rss | awk '{cpu += $1; rss += $2} END {print cpu, rss}'

Вы могли бы также интересоваться free команда для использования памяти:

$ free
             total       used       free     shared    buffers     cached
Mem:       2055480    1806596     248884          0      14016     346276
-/+ buffers/cache:    1446304     609176
Swap:      2097148     132980    1964168

Вывод находится в килобайтах (использование free --mega для мегабайтов или free -m для мебибайт). В частности, used, +/- buffers/cache запись - что-то как общая используемая физическая память (всеми).

7
10.03.2012, 08:46
1 ответ

Действие конвейерной обработки выполняется read в подоболочке, тогда как замена процесса не делает. Для большинства вариантов использования это не проблема, но в этом экземпляре Вы хотите непосредственно влиять на оболочку (путем управления переменными). Поскольку read был вызван в подоболочке, только подоболочка затронута. По сути, любые действия, которые Вы могли бы хотеть выполнить на них, должны будут быть также выполнены в подоболочке; например:

echo a b | { read a b ; echo "$a" "$b" ; }
10
27.01.2020, 20:17
  • 1
    Да, большое спасибо. Я не думал об этой проблеме подоболочки прежде, но это разрешает все. Я также нашел [tldp.org/LDP/abs/html/gotchas.html#BADREAD] (это) теперь в Усовершенствованном Руководстве по созданию сценариев Bash. Они рекомендуют использовать [tldp.org/LDP/abs/html/internal.html#SETPOS] (набор) команда вместо этого, присвоить значения позиционным параметрам. –  Elmar Zander 12.03.2012, 11:26
  • 2
    @ElmarZander - Не используйте печально известное "Усовершенствованное" Руководство по созданию сценариев Bash от TLDP, оно будет учить Вас писать ошибки, не сценарии. Существуют места, где это плохо записано, и намного больше мест, где это просто, утончается неправильно. Я рекомендовал бы BashGuide вместо этого. –  Chris Down 12.03.2012, 13:01

Теги

Похожие вопросы