Для порівняння виконується раз сценаріїв між різними оболонками, деякі відповіді 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'
Примітка: ніяких вбудованих 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
?