GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 30 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 6
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fabien LE LEZ
Le #22500581
On Tue, 24 Aug 2010 19:37:39 +0200, Francois Lafont

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 ?



(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.
Yliur
Le #22500751
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.



Si which n'a rien trouvé, c'est qu'il s'agit d'une commande interne.
Facile, non ? :)
Francois Lafont
Le #22500861
Le 24/08/2010 19:57, Fabien LE LEZ a écrit :

(time ma_commande) 2>&1 |grep real



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
Francois Lafont
Le #22500851
Le 24/08/2010 20:09, Yliur a écrit :

Si which n'a rien trouvé, c'est qu'il s'agit d'une commande interne.
Facile, non ? :)



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
xavier
Le #22500951
Francois 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



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.
Publicité
Suivre les réponses
Poster une réponse
Anonyme