Для сравнения выполняется раз сценариев между различными оболочками, некоторые ответы SE предлагают использовать bash«ы встроенных time команд, например , так:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... и т. д. для каждой оболочки для тестирования. Такие тесты не устраняют время, необходимое для каждой оболочки, чтобы загрузить и инициализировать себя . Например, предположим, что обе вышеупомянутые команды были сохранены на медленном устройстве со скоростью чтения ранней дискеты (124 КБ / с) dash( исполняемый файл ~ 150 КБ) будет загружаться примерно в 7 раз быстрее, чем bash( ~ 1 М ) оболочка время загрузки искажает timeчисла - время предварительной загрузки этих оболочек не имеет отношения к измерению времени пробега foo.shпод каждой оболочкой после загрузки оболочек.
Какой самый лучший портативный и вообще Util для запуска для синхронизации сценария , который может быть запущен из внутри каждой оболочки? Таким образом, приведенный выше код будет выглядеть примерно так:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
NB: нет встроенных time команд оболочки , поскольку ни одна из них не является переносимой или общей.
Еще лучше, если утилита также может измерять время, затрачиваемое внутренними командами и конвейерами оболочки, без необходимости пользователю сначала заключать их в сценарий. Искусственный синтаксис, подобный этому, поможет:
general_timer_util "while read x ; do echo x ; done < foo"
Некоторые снаряды timeмогут справиться с этим. Например bash -c "time while false ; do : ; done"работает. Чтобы увидеть, что работает (и не работает) в вашей системе, попробуйте:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time?