Imprimer le temps d’exécution d’une commande shell

Est-il possible d’imprimer le temps d’exécution d’une commande shell avec la combinaison suivante?

root@hostname:~# "command to execute" && echo "execution time" 

N’oubliez pas qu’il y a une différence entre l’heure de base de bash (qui devrait être appelée par défaut lorsque vous utilisez la time command ) et /usr/bin/time (qui devrait vous obliger à l’appeler par son chemin complet).

Le time intégré est toujours imprimé sur stderr, mais /usr/bin/time vous permet d’envoyer la sortie de l’heure dans un fichier spécifique, afin de ne pas interférer avec le stream stderr de la commande exécutée. De plus, le format de /usr/bin/time est configurable sur la ligne de commande ou par la variable d’environnement TIME , alors que le format d’ time intégré de bash n’est configuré que par la variable d’environnement TIMEFORMAT .

 $ time factor 1234567889234567891 # builtin 1234567889234567891: 142662263 8653780357 real 0m3.194s user 0m1.596s sys 0m0.004s $ /usr/bin/time factor 1234567889234567891 1234567889234567891: 142662263 8653780357 1.54user 0.00system 0:02.69elapsed 57%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+215minor)pagefaults 0swaps $ /usr/bin/time -o timed factor 1234567889234567891 # log to file `timed` 1234567889234567891: 142662263 8653780357 $ cat timed 1.56user 0.02system 0:02.49elapsed 63%CPU (0avgtext+0avgdata 0maxresident)k 0inputs+0outputs (0major+217minor)pagefaults 0swaps 

time est une commande intégrée dans la plupart des shells qui écrit des informations de temps d’exécution sur le tty.

Vous pourriez aussi essayer quelque chose comme

 start_time=`date +%s`  end_time=`date +%s` echo execution time was `expr $end_time - $start_time` s. 

Ou en bash :

 start_time=`date +%s`  && echo run time is $(expr `date +%s` - $start_time) s 
 root@hostname:~# time [command] 

Il distingue également le temps réel utilisé et le temps système utilisé.

Pour une mesure delta ligne par ligne, essayez gnonom .

C’est un utilitaire de ligne de commande, un peu comme les ts de moreutils, pour append des informations d’horodatage à la sortie standard d’une autre commande. Utile pour les processus de longue durée où vous souhaitez un historique de ce qui prend autant de temps.

Passer quelque chose à gnomon appenda un horodatage à chaque ligne, indiquant combien de temps cette ligne était la dernière ligne du tampon, c’est-à-dire combien de temps la ligne suivante a paru. Par défaut, gnomon affichera les secondes écastings entre chaque ligne, mais cela est configurable.

démo de gnomon

Ajout à la réponse de @ mob:

L’ajout de %N à date +%s nous donne une précision à la nanoseconde:

 start=`date +%s%N`;;end=`date +%s%N`;echo `expr $end - $start` 

Si je commence un long processus comme une copie ou un hachage et que je veux savoir plus tard combien de temps cela a pris, je le fais simplement:

 $ date; sha1sum reallybigfile.txt; date 

Ce qui se traduira par la sortie suivante:

 Tue Jun 2 21:16:03 PDT 2015 5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt Tue Jun 2 21:33:54 PDT 2015 

Certes, comme implémenté ici, il n’est pas très précis et ne calcule pas le temps écoulé. Mais c’est simple et parfois tout ce dont vous avez besoin.

Dans zsh, vous pouvez utiliser

 =time ... 

En bash ou zsh, vous pouvez utiliser

 command time ... 

Ceux-ci (par différents mécanismes) forcent l’utilisation d’une commande externe.

Juste ps -o etime= -p ""