La commande time
Le
Francois Lafont
Bonjour à tous,
Je suis sous sous Ubuntu 10.04 et mon shell est le bash.
1) Je souhaite mesurer le temps d'exécution d'une commande avec :
~$ time maCommande
Au lieu d'avoir en sortie les 3 lignes real+user+sys, je ne voudrais
avoir en sortie que la ligne real. Comment faut-il faire ?
J'avais pensé d'abord au naïf :
~$ time maCommande | grep real
mais ça ne marche pas car, si je comprends bien, dans ce cas time mesure
le temps d'exécution de la commande "maCommande | grep real" et ensuite
fait son travail, c'est-à-dire affiche les 3 lignes et non une seule.
2) Du coup, j'ai voulu chercher des infos sur time avec 'man time'. J'ai
vu plein d'options avec cette commande mais aucune ne marchaient. J'ai
fini par comprendre que le time que j'utilise dans 1) est une commande
interne de mon shell et que le time de 'man time' est /usr/bin/time, une
commande externe à mon shell.
Y a-t-il un moyen, via le shell, de savoir qui exactement (le time
interne ou /usr/bin/time) est utilisé lorsque je tape 'time XXX' ? Je
pensais au départ que 'which time' le faisait mais justement il
m'indique /usr/bin/time et j'ai pu lire que which ne s'occupait pas des
commandes interne au shell (which cd n'affiche rien). Je sais bien que
ce sont les commandes internes qui priment, mais je ne les connais pas
toutes. Est-ce que ça existe une commande du genre ci-dessous ?
~$ whichPourDeVrai time
commande interne time
~$ whichPourDeVrai
/usr/bin/pdflatex
Merci d'avance.
--
François Lafont
Je suis sous sous Ubuntu 10.04 et mon shell est le bash.
1) Je souhaite mesurer le temps d'exécution d'une commande avec :
~$ time maCommande
Au lieu d'avoir en sortie les 3 lignes real+user+sys, je ne voudrais
avoir en sortie que la ligne real. Comment faut-il faire ?
J'avais pensé d'abord au naïf :
~$ time maCommande | grep real
mais ça ne marche pas car, si je comprends bien, dans ce cas time mesure
le temps d'exécution de la commande "maCommande | grep real" et ensuite
fait son travail, c'est-à-dire affiche les 3 lignes et non une seule.
2) Du coup, j'ai voulu chercher des infos sur time avec 'man time'. J'ai
vu plein d'options avec cette commande mais aucune ne marchaient. J'ai
fini par comprendre que le time que j'utilise dans 1) est une commande
interne de mon shell et que le time de 'man time' est /usr/bin/time, une
commande externe à mon shell.
Y a-t-il un moyen, via le shell, de savoir qui exactement (le time
interne ou /usr/bin/time) est utilisé lorsque je tape 'time XXX' ? Je
pensais au départ que 'which time' le faisait mais justement il
m'indique /usr/bin/time et j'ai pu lire que which ne s'occupait pas des
commandes interne au shell (which cd n'affiche rien). Je sais bien que
ce sont les commandes internes qui priment, mais je ne les connais pas
toutes. Est-ce que ça existe une commande du genre ci-dessous ?
~$ whichPourDeVrai time
commande interne time
~$ whichPourDeVrai
/usr/bin/pdflatex
Merci d'avance.
--
François Lafont

Poser une question


(time ma_commande) 2>&1 |grep real
On met le bloc "time ma_commande" entre parenthèses pour que le reste
concerne ce bloc entier.
Par ailleurs, time, si je ne m'abuse, affiche le résultat sur stderr.
Il faut donc ramener ça sur stdout, d'où le "2>&1".
Une fois qu'on a le bon texte au bon endroit, on peut lui appliquer
grep.
Si which n'a rien trouvé, c'est qu'il s'agit d'une commande interne.
Facile, non ? :)
Ah merci bien ! Avec les explications, c'est parfaitement clair. En
regardant dans 'man bash', j'ai pu voir que ceci fonctionne bien aussi.
~$ { time sleep 0.2; } 2>&1 | grep real
C'est curieux que time envoie son résultat sur stderr, mais bon.
Merci beaucoup, la question 1) est résolue. :-)
--
François Lafont
C'est juste, si which ne trouve rien, c'est une commande interne. Mais
la réciproque n'est pas forcément vraie, en particulier avec time
justement. J'ai ça :
~$ which time
/usr/bin/time
Moi j'ai cru alors que lorsque je tapais "time XXXX", c'était forcément
/usr/bin/time qui était utilisée. Mais c'est faux car c'est la commande
time interne qui est utilisée. D'où ma question : quelle est la commande
qui permet de savoir qui est utilisé exactement quand je tape "time
XXXX". which ne répond pas à cette question là ? :-)
--
François Lafont
Et moi, j'ai ça avec la commande type :
[ ~]$ type time
time is a shell keyword
[ ~]$ which time
...rien...
--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.