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"
Réponses:
N'oubliez pas qu'il y a une différence entre le builtin de bash time
(qui devrait être appelé par défaut lorsque vous le faites time command
) et /usr/bin/time
(qui devrait vous obliger à l'appeler par son chemin complet).
L'intégré time
imprime toujours sur stderr, mais /usr/bin/time
vous permettra d'envoyer la sortie de l'heure à un fichier spécifique, afin de ne pas interférer avec le flux stderr de la commande exécutée. De plus, /usr/bin/time
le format de s est configurable sur la ligne de commande ou par la variable d'environnement TIME
, alors que le time
format intégré de bash n'est configuré que par la TIMEFORMAT
variable d'environnement.
$ 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
help time
parce que je n'ai jeté qu'un coup d'œil dessus et j'ai pensé que c'était un argument de ligne de commande. Je mettrai à jour la réponse.
time
est une commande intégrée dans la plupart des shells qui écrit les informations de temps d'exécution sur le tty.
Vous pouvez également 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 en bash
:
start_time=`date +%s`
<command-to-execute> && echo run time is $(expr `date +%s` - $start_time) s
time
utilise des millisecondes. Et si vous voulez chronométrer une poignée de commandes ensemble sans avoir à utiliser de variables et de calculs, vous pouvez utiliser des parenthèses: time ( command1 ; command2 ; command3 )
vous pouvez même les chronométrer individuellement avec un temps total, comme ceci: time ( time command1 ; time command2 ; time command3 )
Bien sûr, si vous voulez une vingtaine de commandes, vous pouvez mieux vaut utiliser la solution de cette réponse. Mais alors, vous devriez commencer à penser à mettre toutes vos commandes dans un script ...
root@hostname:~# time [command]
Il fait également la distinction entre le temps réel utilisé et le temps système utilisé.
time
écrit sur le tty, pas sur stderr. Ce qui, je suppose, aggrave les choses.
Pour une mesure delta ligne par ligne, essayez gnonom .
C'est un utilitaire de ligne de commande, un peu comme le ts de moreutils, pour ajouter 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 si longtemps.
Ajouter 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 pour apparaître. Par défaut, gnomon affichera les secondes écoulées entre chaque ligne, mais cela est configurable.
Si je démarre un processus de longue durée comme une copie ou un hachage et que je veux savoir plus tard combien de temps cela a pris, je fais juste ceci:
$ date; sha1sum reallybigfile.txt; date
Ce qui entraînera la sortie suivante:
Tue Jun 2 21:16:03 PDT 2015
5089a8e475cc41b2672982f690e5221469390bc0 reallybigfile.txt
Tue Jun 2 21:33:54 PDT 2015
Certes, tel qu'implémenté ici, il n'est pas très précis et ne calcule pas le temps écoulé. Mais c'est très simple et parfois tout ce dont vous avez besoin.
Dans zsh, vous pouvez utiliser
=time ...
Dans bash ou zsh, vous pouvez utiliser
command time ...
Ceux-ci (par des mécanismes différents) forcent une commande externe à être utilisée.
Juste ps -o etime= -p "<your_process_pid>"
man bash
: "La variable TIMEFORMAT peut être définie sur une chaîne de format qui spécifie comment les informations de minutage doivent être affichées"