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

script : dupliquer la sortie dans un fichier

8 réponses
Avatar
Francois Lafont
Bonjour à tous,

Je prend un petit script comme exemple :

------------------------------------
#! /bin/bash

echo debut
zzzzzzz # c'est juste pour simuler une erreur
echo "Saisir : "
read -r nom
echo "Vous avez saisi $nom."
echo "Au revoir."
------------------------------------

J'aimerais pouvoir *dupliquer* la sortie de ce script dans un fichier.
Je sais bien que la commande "tee" permet cela mais j'aimerais éviter
autant que possible un truc comme ça :

------------------------------------
#! /bin/bash

{
echo debut
zzzzzzz # c'est juste pour simuler une erreur
echo "Saisir : "
read -r nom
echo "Vous avez saisi $nom."
echo "Au revoir."
} 2>&1 | tee out.txt
------------------------------------

car dans la réalité mon script est beaucoup plus gros que ça et je
trouve que ce n'est pas très pratique comme façon d'écrire. De plus, en
réalité je ferai en sorte que la sortie dans un fichier (en plus de
celle dans le terminal) soit optionnelle (pas de souci pour l'aspect
optionnel).

Est-il possible de faire cette duplication de la sortie autrement que
dans l'exemple juste au-dessus (sachant que cette duplication sera
optionnel via un test sur un argument par exemple) ?

Par ailleurs, même avec l'exemple juste au-dessus, la saisie de
l'utilisateur n'apparaît pas dans le fichier out.txt alors qu'elle
apparaît sur le terminal. Je comprends bien pourquoi : la saisie de
l'utilisateur ne fait pas partie de la sortie standard du script. Ceci
étant, si vous avez une solution pour faire en sorte que ce qui apparaît
sur le terminal et ce qu'il y a dans out.txt soit rigoureusement
identique (autrement dit on inclut la saisie de l'utilisateur aussi)
alors ce serait la cerise sur le gâteau.

Merci d'avance pour votre aide.

--
François Lafont

8 réponses

Avatar
Arnaud Gomes-do-Vale
Francois Lafont writes:

Par ailleurs, même avec l'exemple juste au-dessus, la saisie de
l'utilisateur n'apparaît pas dans le fichier out.txt alors qu'elle
apparaît sur le terminal. Je comprends bien pourquoi : la saisie de
l'utilisateur ne fait pas partie de la sortie standard du script. Ceci
étant, si vous avez une solution pour faire en sorte que ce qui apparaît
sur le terminal et ce qu'il y a dans out.txt soit rigoureusement
identique (autrement dit on inclut la saisie de l'utilisateur aussi)
alors ce serait la cerise sur le gâteau.



La commande script fait ce que tu veux.

--
Arnaud
http://blogs.glou.org/arnaud/
Avatar
Francois Lafont
Bonsoir,

Le 11/05/2012 00:32, Arnaud Gomes-do-Vale a écrit :
Francois Lafont writes:

Par ailleurs, même avec l'exemple juste au-dessus, la saisie de
l'utilisateur n'apparaît pas dans le fichier out.txt alors qu'elle
apparaît sur le terminal. Je comprends bien pourquoi : la saisie de
l'utilisateur ne fait pas partie de la sortie standard du script. Ceci
étant, si vous avez une solution pour faire en sorte que ce qui apparaît
sur le terminal et ce qu'il y a dans out.txt soit rigoureusement
identique (autrement dit on inclut la saisie de l'utilisateur aussi)
alors ce serait la cerise sur le gâteau.



La commande script fait ce que tu veux.



Bam ! En plein dans le mille !!!
Et bien merci beaucoup Arnaud, c'est parfait (j'ai même la cerise sur le
gâteau). :-)

Du coup, je fais ça :

script -qf -c monscript.bash /home/francois/out.txt

Je n'ai qu'un seul regret, c'est que le code de retour de la commande
semble toujours être 0, alors que j'aurais préféré que ce soit le code
de retour de monscript.bash. Mais dans mon cas, ça n'est pas un problème
du tout.

Merci encore. :-)

--
François Lafont
Avatar
Nicolas George
Arnaud Gomes-do-Vale , dans le message
, a écrit :
La commande script fait ce que tu veux.



Et d'autres choses qui ne sont pas anodines du tout par la même occasion. Tu
es sûr que tu comprends précisément ce que fait la commande script ?
Avatar
Olivier Miakinen
Bonjour,

Le 11/05/2012 07:53, Nicolas George a écrit :

La commande script fait ce que tu veux.



Et d'autres choses qui ne sont pas anodines du tout par la même occasion. Tu
es sûr que tu comprends précisément ce que fait la commande script ?



Moi je croyais le comprendre, mais tu m'inquiètes. À quoi fais-tu
allusion ?

Cordialement,
--
Olivier Miakinen
Avatar
Nicolas George
Olivier Miakinen , dans le message <join7k$1uhq$,
a écrit :
Moi je croyais le comprendre, mais tu m'inquiètes. À quoi fais-tu
allusion ?



Le fait d'allouer un pty, ce qui change le comportement de pas mal de
programme. Par exemple ls aura un affichage très différent selon si on
capture sa sortie avec | tee ou avec script.
Avatar
Lucas Levrel
Le 11 mai 2012, Nicolas George a écrit :

Olivier Miakinen , dans le message <join7k$1uhq$,
a écrit :
Moi je croyais le comprendre, mais tu m'inquiètes. À quoi fais-tu
allusion ?



Le fait d'allouer un pty, ce qui change le comportement de pas mal de
programme. Par exemple ls aura un affichage très différent selon si on
capture sa sortie avec | tee ou avec script.



Et donc, y a-t-il une autre solution au problème de François ?

--
LL
Avatar
Francois Lafont
Le 11/05/2012 22:05, Lucas Levrel a écrit :
Le 11 mai 2012, Nicolas George a écrit :

Olivier Miakinen , dans le message <join7k$1uhq$,
a écrit :
Moi je croyais le comprendre, mais tu m'inquiètes. À quoi fais-tu
allusion ?



Le fait d'allouer un pty, ce qui change le comportement de pas mal de
programme. Par exemple ls aura un affichage très différent selon si on
capture sa sortie avec | tee ou avec script.



Et donc, y a-t-il une autre solution au problème de François ?



Et par ailleurs, je n'arrive pas à comprendre pourquoi "script" ne
convient pas. De ce que j'ai pu tester, ça marche parfaitement.

De plus, sur un petit essai rapide, mis à part la première ligne qui
ressemble à une sorte d'en-tête de la commande "script", j'obtiens la
même chose avec :

script -qf -c 'ls' out.txt

et avec

ls | tee out2.txt

En fait précision : j'obtiens la même chose sur Gnome-terminal (un
fichier par ligne dans les deux cas) mais pas la même chose sur tty1 où
avec "script" la liste des fichiers s'affiche sur une seule ligne. C'est
ça le problème ?

En tout cas, pour ma part la sortie du script que je veux dupliquer
n'est pas destiné à être traitée par un programme derrière, c'est un
simple petit log de rien du tout, dont je voulais avoir une trace dans
un fichier pour mémoire. Donc, à moins d'avoir loupé une explication (ce
qui n'est pas à exclure), la commande "script" semble bien convenir.


--
François Lafont
Avatar
Benoit Izac
Bonjour,

le 11/05/2012 à 01:27, Francois Lafont a écrit dans le message
<4fac4ec7$0$6823$ :

Je n'ai qu'un seul regret, c'est que le code de retour de la commande
semble toujours être 0, alors que j'aurais préféré que ce soit le code
de retour de monscript.bash. Mais dans mon cas, ça n'est pas un problème
du tout.



L'option « -e » qui fait précisément cela (util-linux 2.21.1).

--
Benoit Izac