Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Commande time et redirection

4 réponses
Avatar
vin100k
Bonjour,

J'ai une petite question à propos de la commande time et de la redirection.
Ca ressemble un peu à ce post :
http://www.generation-nt.com/reponses/commande-time-et-redirection-entraide-178617.html
mais je n'arrive pas à m'en sortir pour autant...

Avec une commande du type "time mon_script", est-il possible de récupérer les résultats du time dans une variable tout en gardant l'output de mon_script à l'écran ?

Merci par avance :)
Vincent.

4 réponses

Avatar
Stephane Chazelas
2008-11-18, 02:29(-06), vin100k:
J'ai une petite question à propos de la commande time et de la redirection.
Ca ressemble un peu à ce post :
http://www.generation-nt.com/reponses/commande-time-et-redirection-entraide-178617.html



Tiens, un message de usenet sur Unix qui se retrouve dans sur un
site dedié a Microsoft...

mais je n'arrive pas à m'en sortir pour autant...

Avec une commande du type "time mon_script", est-il possible de récupérer les
résultats du time dans une variable tout en gardant l'output de mon_script à
l'écran ?


[...]

{ var=$({ time ./mon_script 2>&4 4>&-;} 2>&1 >&3 3>&-);} 3>&1 4>&2

--
Stéphane
Avatar
mpg
Le (on) mardi 18 novembre 2008 10:24, Stephane Chazelas a écrit (wrote) :

{ var=$({ time ./mon_script 2>&4 4>&-;} 2>&1 >&3 3>&-);} 3>&1 4>&2



Si tu as le temps de donner deux mots d'explication, ça m'intéresse. En
particulier je ne connaissais pas le file descriptor « - ».

Manuel.
Avatar
Stephane CHAZELAS
2008-11-19, 00:46(+01), mpg:
Le (on) mardi 18 novembre 2008 10:24, Stephane Chazelas a écrit (wrote) :

{ var=$({ time ./mon_script 2>&4 4>&-;} 2>&1 >&3 3>&-);} 3>&1 4>&2



Si tu as le temps de donner deux mots d'explication, ça m'intéresse. En
particulier je ne connaissais pas le file descriptor « - ».


[...]

x>&-, ca close le fd x.

Supposant que dans le script on ait ceci pour stdout et stderr:

1 -> /dev/pts/3
2 -> /tmp/err_file

{ truc; } 3>&1 4>&2

execute "truc" avec son fd 3 redirigé sur la meme chose que 1
et 4 la meme chose que 2.

Donc, on a pour truc:

1 -> /dev/pts/3
2 -> /tmp/err_file
3 -> /dev/pts/3
4 -> /tmp/err_file

Dans var=$(machin), machin a son stdout redirigé sur un pipe qui
sert a remplir la variable $var, donc on a pour machin:

1 -> pipe -> $var
2 -> /tmp/err_file
3 -> /dev/pts/3
4 -> /tmp/err_file

Dans "time cmd", les information de time sont ecrite sur stderr.
Mais attention time est un keyword, pas une simple commande.

time cmd 2> whatever
time la commande "cmd 2> whatever", donc on ne redirige pas le
stderr de time, seulement celui de cmd. Il faut rediriger stderr
avant que time ne soit parsé et interpreté. Hence le { time ...
} 2> ...

{ time ... } 2>&1 >&3 3>&-

donne:

2 -> pipe -> $var
1 -> /dev/pts/3
4 -> /tmp/err_file
(3 closed)

Donc l'output de time va dans $var.

Ensuite:

./mon_script 2>&4 4>&-

donne:

1 -> /dev/pts/3
2 -> /tmp/err_file
(4 closed)

C'est a dire le stdout et stderr originaux.

--
Stéphane
Avatar
Cyrille Lefevre
mpg a écrit :
Le (on) mardi 18 novembre 2008 10:24, Stephane Chazelas a écrit (wrot e) :

{ var=$({ time ./mon_script 2>&4 4>&-;} 2>&1 >&3 3>&-);} 3>&1 4>&2



Si tu as le temps de donner deux mots d'explication, ça m'intéresse . En
particulier je ne connaissais pas le file descriptor « - ».

Manuel.




Bonjour,

http://www.opengroup.org/onlinepubs/000095399/utilities/xcu_chap02.html#t ag_02_07_05

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.