Pour comparer les temps d'exécution des scripts entre différents shells, certaines réponses SE suggèrent d'utiliser bash
la commande intégrée de time
, comme ceci:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... etc , pour chaque shell à tester. Ces critères de référence ne parviennent pas à éliminer le temps nécessaire pour chaque coquille charger et initialiser lui - même . Par exemple, supposons que les deux commandes ci-dessus aient été stockées sur un périphérique lent avec la vitesse de lecture d'une disquette ancienne , (124 Ko / s), dash
(un exécutable de ~ 150 Ko) se chargerait environ 7 fois plus rapidement que bash
( ~ 1 M ), le shell le temps de chargement fausserait les time
chiffres - les temps de préchargement de ces réservoirs étant sans rapport avec la mesure des durées de fonctionnement de foo.sh
chaque coquille après le chargement des réservoirs.
Quelle est la meilleure utilisation portable et générale à exécuter pour la synchronisation des scripts qui peut être exécutée à partir de chaque shell? Ainsi, le code ci-dessus ressemblerait à quelque chose comme:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
NB: pas de time
commandes intégrées au shell , car aucune n'est portable ou générale.
Mieux encore si l'utilitaire est également capable de comparer le temps pris par les commandes internes et les pipelines d'un shell, sans que l'utilisateur n'ait à les emballer au préalable dans un script. Une syntaxe artificielle comme celle-ci aiderait:
general_timer_util "while read x ; do echo x ; done < foo"
Certains obus time
peuvent gérer cela. Par exemple bash -c "time while false ; do : ; done"
fonctionne. Pour voir ce qui fonctionne (et ne fonctionne pas) sur votre système, essayez:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?