Per confrontare i tempi di esecuzione degli script tra diverse shell, alcune risposte SE suggeriscono di usare bash
il comando integrato, in questo time
modo:
time bash -c 'foo.sh'
time dash -c 'foo.sh'
... ecc. , per ogni shell da testare. Tali parametri non riescono ad eliminare il tempo impiegato per ciascun guscio per caricare e inizializzare stessa . Ad esempio, supponiamo che entrambi i comandi di cui sopra siano stati memorizzati su un dispositivo lento con la velocità di lettura di un primo floppy disk , (124 KB / s), dash
(un eseguibile di ~ 150 KB) caricerebbe circa 7 volte più veloce di bash
( ~ 1 M ), la shell il tempo di caricamento distorcerebbe i time
numeri - i tempi di precaricamento di quelle shell sono irrilevanti per misurare i tempi di esecuzione di foo.sh
ogni shell dopo che le shell sono state caricate.
Qual è la migliore utilità portatile e generale da eseguire per i tempi degli script che possono essere eseguiti all'interno di ogni shell? Quindi il codice sopra sarebbe simile a:
bash -c 'general_timer_util foo.sh'
dash -c 'general_timer_util foo.sh'
NB: nessun comando incorporato della shell time
, poiché nessuno è portatile o generale.
Meglio ancora se l'utilità è anche in grado di confrontare il tempo impiegato dai comandi interni e dalle pipeline di una shell, senza che l'utente debba prima avvolgerli in uno script. Una sintassi artificiale come questa aiuterebbe:
general_timer_util "while read x ; do echo x ; done < foo"
Alcune shell ' time
possono gestirlo. Ad esempio bash -c "time while false ; do : ; done"
funziona. Per vedere cosa funziona (e non funziona) sul tuo sistema prova:
tail +2 /etc/shells |
while read s ; do
echo $s ; $s -c "time while false ; do : ; done" ; echo ----
done
/usr/bin/time
?