Вы можете написать функцию, которая возвращает статус, указанный в качестве аргумента, или 255
, если он не указан. (Я называю это ret
, так как он "возвращает" свое значение.)
ret() { return "${1:-255}"; }
и используйте ret
вместо вызова exit
. Это позволяет избежать неэффективности создания оболочки sub -в принятом в настоящее время ответе.
Некоторые измерения.
time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'
на моей машине занимает около 3,5 секунд.
time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'
на моей машине занимает около 0,051 секунды, в 70 раз быстрее. Установка обработки по умолчанию все равно делает ее в 60 раз быстрее. Очевидно, что цикл имеет некоторые накладные расходы. Если я изменю тело цикла на просто :
или true
, тогда время уменьшится вдвое до 0,025, полностью пустой цикл будет недопустимым синтаксисом. Добавление ;:
к циклу показывает, что эта минимальная команда занимает 0,007 секунды, поэтому накладные расходы цикла составляют около 0,018. Вычитание этих накладных расходов из двух тестов показывает, что решение ret
более чем в 100 раз быстрее.
Очевидно, что это синтетическое измерение, но вещи складываются. Если вы сделаете все в 100 раз медленнее, чем нужно, вы получите медленные системы. 0,0
Может ли sysstat
что-нибудь помочь вам? Если вы включите его, sar
позволит вам печатать хорошие отчеты об использовании процессора и памяти (и некоторые другие статистические данные ). Есть несколько инструментов, которые позволяют вам преобразовать это в графики, например, (ksar ).