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 existe une différence entre time
(qui doit être appelé par défaut lorsque vous utilisez time command
) et /usr/bin/time
(qui devrait vous obliger à l'appeler par son chemin complet).
La variable time
intégrée est toujours imprimée sur stderr, mais /usr/bin/time
vous permettra d'envoyer la sortie de l'heure vers un fichier spécifique, de sorte que vous n'interfériez pas avec le flux stderr de la commande exécutée. De plus, le format de /usr/bin/time
est configurable sur la ligne de commande ou à l'aide de la variable d'environnement TIME
, alors que le format time
de bash est uniquement configuré 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 à la plupart des shells qui écrit des informations de temps d'exécution sur le terminal.
Vous pouvez aussi essayer quelque chose comme
start_time=`date +%s`
<command-to-execute>
end_time=`date +%s`
echo execution time was `expr $end_time - $start_time` s.
Ou dans bash
:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
root@hostname:~# time [command]
Il fait également la distinction entre 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 ts de moreutils, pour ajouter des informations d'horodatage à la sortie standard d'une autre commande. Utile pour les processus de longue durée pour lesquels vous souhaitez un enregistrement historique de ce qui prend si longtemps.
Piping quoi que ce soit à gnomon ajoutera un horodatage à chaque ligne, indiquant combien de temps cette ligne était la dernière ligne du tampon - c'est-à-dire combien de temps il a fallu à la ligne suivante. Par défaut, gnomon affichera les secondes écoulées entre chaque ligne, mais cela est configurable.
Ajout à la réponse de @ mob:
Ajouter %N
à date +%s
nous donne une précision à la nanoseconde:
start=`date +%s%N`;<command>;end=`date +%s%N`;echo `expr $end - $start`
Si je commence un processus long comme une copie ou un hachage et que je veux savoir plus tard combien de temps cela a pris, je fais simplement ceci:
$ date; sha1sum reallybigfile.txt; date
Ce qui donnera le résultat suivant:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Certes, tel qu'il est mis en œuvre 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.
En 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 "<your_process_pid>"