Для сравнения выполняется раз сценариев между различными оболочками, некоторые ответы 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
?