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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
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.
Damien Goutte-Gattat
Le #22500941
On Tue, 24 Aug 2010 20:46:22 +0200, Francois Lafont wrote:
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à ? :-)



"type", qui permet de distinguer entre les commandes internes, les alias,
les fonctions shell, et les exécutables.

$ type time
time is a shell keyword
$ type type
type is a shell builtin
$ type ls
ls is aliased to `ls -b -T 0 --color=auto`
$ type vi
vi is /usr/bin/vi
Erwan David
Le #22500931
Francois Lafont
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à ? :-)



ça dépend de ton shell...

En zsh which te dira ce qu'il faut.

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Yliur
Le #22500971
Le Tue, 24 Aug 2010 20:46:22 +0200
Francois Lafont
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à ? :-)





Oui, il faudrait faire un script whichPourDeVrai qui vide la variable
PATH le temps d'un test. Mais d'après d'autres réponses "type" répond au
problème efficacement.
Francois Lafont
Le #22501051
Le 24/08/2010 20:53, Xavier a écrit :

Et moi, j'ai ça avec la commande type :

[ ~]$ type time
time is a shell keyword



Parfait, merci beaucoup. C'est type qui résout ma question 2. Un petit
coup de :

~$ type commande
~$ which commande

et je saurai sans ambiguïté qui sera appelé lors d'une instruction du
style 'commande XXX'.

Impeccable, le fil est résolu pour moi.


[ ~]$ which time
...rien...



Ah, chez moi ça donne /usr/bin/time et je trouve que c'est bizarre
d'avoir un programme dans /bin qui porte le même le même nom qu'un mot
clé du shell.


Petite question subsidiaire :

~$ type time
time est un mot-clé du shell
~$ type cd
cd est une primitive du shell

C'est quoi la nuance entre 'mot-clé' et 'primitive' ?


--
François Lafont
Erwan David
Le #22501191
Francois Lafont
Le 24/08/2010 20:53, Xavier a écrit :

Et moi, j'ai ça avec la commande type :

[ ~]$ type time
time is a shell keyword



Parfait, merci beaucoup. C'est type qui résout ma question 2. Un petit
coup de :

~$ type commande
~$ which commande

et je saurai sans ambiguïté qui sera appelé lors d'une instruction du
style 'commande XXX'.

Impeccable, le fil est résolu pour moi.


[ ~]$ which time
...rien...



Ah, chez moi ça donne /usr/bin/time et je trouve que c'est bizarre
d'avoir un programme dans /bin qui porte le même le même nom qu'un mot
clé du shell.


Petite question subsidiaire :

~$ type time
time est un mot-clé du shell
~$ type cd
cd est une primitive du shell

C'est quoi la nuance entre 'mot-clé' et 'primitive' ?



Dis déjà de quel shell tu parles...

sh, csh, ksh, tcsh, dash, zsh, bash ?
Ou un autre ?

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Publicité
Poster une réponse
Anonyme