#1 Le 12/09/2012, à 11:04
- DonutMan75
[Résolu] Quelques questions concernant les redirecteurs
Bonjour à vous tous,
je fais quelques tests avec les descripteurs d'entrées/sorties et j'aurais aimé avoir vos avis éclairés sur quelques points.
=== Premier cas ===
Imaginons que dans le corps du script, je choisisse de changer les descripteurs standards de cette façon :
exec 0<entree.txt 1>sortie.txt 2>erreur.txt
Plus loin dans ce même script, je souhaite retrouver le comportement par défaut.
J'ai essayé la syntaxe suivante qui semble marcher :
exec 0</dev/tty 1>/dev/tty 2>/dev/tty
Vous paraît-t-elle propre ?
Par ailleurs, je n'ai pas très bien compris pourquoi il existe plusieurs tty dans /dev/ (tty0, tty1 etc...) ?
=== Second cas ===
Je souhaiterais rediriger la sortie standard et les messages d'erreur dans un seul et même fichier pour l'ensemble des commandes de mon script.
Pour cela, je dois écrire au début :
exec 1>sortie.txt 2>&1
De cette façon, les messages ne s'écrasent pas les uns et les autres et je garde la structure séquentielle des messages.
Problème : après exécution du script, quand je lis une ligne quelconque de sortie.txt, je ne sais pas s'il s'agit d'une ligne standard ou d'une ligne d'erreur. Pensez-vous qu'il soit possible de préfixer systématiquement chacune des lignes avec un tag "STD>>>" ou "ERR>>>" afin d'identifier la nature du message ? J'ai beau me creuser la tête, je ne vois pas comment faire ça....
Merci d'avance pour vos réponses
Donut
Dernière modification par DonutMan75 (Le 17/09/2012, à 17:20)
Hors ligne
#2 Le 12/09/2012, à 11:48
- pingouinux
Re : [Résolu] Quelques questions concernant les redirecteurs
Bonjour,
Réponse au === Second cas ===
exec 1> >(sed 's/^/STD>>>/' >sortie.txt) 2> >(sed 's/^/\x08\x08\x08\x08\x08\x08ERR>>>/' >&1)
Ce n'est pas très joli, et il y a peut-être plus simple.
Ajouté : il y a plus simple
exec 1> >(sed 's/^/STD>>>/' >sortie.txt) 2> >(sed 's/^/\x0dERR>>>/' >&1)
Remarque : À l'écran, le fichier sortie.txt est correct. Si tu l'édites, tu verras que les messages d'erreur ressemblent à ceci :
STD>>>\rERR>>>Le message d'erreur
Dernière modification par pingouinux (Le 12/09/2012, à 12:10)
Hors ligne
#3 Le 12/09/2012, à 12:12
- DonutMan75
Re : [Résolu] Quelques questions concernant les redirecteurs
Bonjour pingouinux,
merci pour ta réponse
Pourrais-tu détailler ta syntaxe ?
Je comprends bien les deux commandes sed, mais je ne comprends pas leur branchement avec le reste. En particulier, que signifie "1> >" ?
D'après ce que je comprends, les messages envoyés sur les sorties 1 et 2 sont filtrés par sed puis redirigés dans sortie.txt ?
Sortie 1 : le filtre ajoute "STD>>>" au début de la ligne
Sortie 2 : le filtre ajoute "ERR>>>" au début de la ligne ET supprime (par avance) les 6 caractères ("STD>>>") qui seront ajoutés dans &1
Merci
Hors ligne
#4 Le 12/09/2012, à 12:18
- pingouinux
Re : [Résolu] Quelques questions concernant les redirecteurs
En particulier, que signifie "1> >" ?
command1 1> >(command2)
La sortie standard de command1 sert d'entrée standard à command2.
Hors ligne
#5 Le 12/09/2012, à 12:59
- DonutMan75
Re : [Résolu] Quelques questions concernant les redirecteurs
Bonjour, je viens de tester sur mon pc et ça ne marche pas...
Pour simplifier, j'ai testé avec deux scripts :
PointA : redirige sa sortie standard sur l'entrée de pointB puis fait un echo "coucou"
#! /bin/bash
exec 1> >./PointB
echo "coucou"
PointB : redirige sa sortie standard dans sortieB.txt
#! /bin/bash
exec 1>./sortieB.txt
Quand j'execute PointA, j'ai l'erreur suivante :
./PointA : syntax error near unexpected token '>'
./PointA : 'exec 1> >./PointB'
Savez-vous pourquoi cela ne fonctionne pas ?
Je me demande par ailleurs s'il ne manque pas quelque chose dans PointB pour lui dire de recopier son entrée standard sur sa sortie standard ? Quelque chose comme exec 0 > &1 (mais je ne pense pas que ca soit valide)??
Merci
Donut
Hors ligne
#6 Le 12/09/2012, à 13:13
- pingouinux
Re : [Résolu] Quelques questions concernant les redirecteurs
Voici ce qui marche :
$ cat PointA
#! /bin/bash
exec 1> >(./PointB)
echo "coucou"
$ cat PointB
#! /bin/bash
exec 1>./sortieB.txt
cat
Hors ligne
#7 Le 12/09/2012, à 13:52
- DonutMan75
Re : [Résolu] Quelques questions concernant les redirecteurs
Super,
ça marche nickel maintenant,
j'ai juste remplacé le cat de PointB (pose problème) par :
while read ligne ; do
echo "$ligne"
done;
Merci pour ton aide
Donut
Hors ligne
#8 Le 12/09/2012, à 13:54
- pingouinux
Re : [Résolu] Quelques questions concernant les redirecteurs
Le cat fonctionne bien chez moi.
Hors ligne
#9 Le 12/09/2012, à 18:02
- DonutMan75
Re : [Résolu] Quelques questions concernant les redirecteurs
Ah oui, je viens de retenter ça chez moi..
J'ai du faire une erreur de frappe de tout à l'heure...
Merci encore pour ton aide
Donut
Hors ligne
#10 Le 15/09/2012, à 11:58
- Postmortem
Re : [Résolu] Quelques questions concernant les redirecteurs
Salut,
Bonjour à vous tous,
je fais quelques tests avec les descripteurs d'entrées/sorties et j'aurais aimé avoir vos avis éclairés sur quelques points.
=== Premier cas ===
Imaginons que dans le corps du script, je choisisse de changer les descripteurs standards de cette façon :
exec 0<entree.txt 1>sortie.txt 2>erreur.txt
Plus loin dans ce même script, je souhaite retrouver le comportement par défaut.
J'ai essayé la syntaxe suivante qui semble marcher :exec 0</dev/tty 1>/dev/tty 2>/dev/tty
Vous paraît-t-elle propre ?
Pour récupérer le comportement par défaut, il faut ajouter ceci juste avant de faire tes redirections ; ça va sauvegarder les descripteurs par défaut (la sortie standard dans le descripteur 3, la sortie d'erreur dans le descripteur 4 et l'entrée standard dans le descripteur 5) :
exec 3>&1 4>&2 5<&0
exec <ici vont tes redirections>
Puis, quand tu veux restaurer les descripteurs par défaut (ça ferme les descripteurs 3, 4 et 5 par la même occasion) :
exec >&3- 2>&4- <&5-
Comme ça, tu n'es pas embêté si tes descripteurs par défaut sont autres que /dev/tty.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#11 Le 17/09/2012, à 17:20
- DonutMan75
Re : [Résolu] Quelques questions concernant les redirecteurs
Bonjour Postmortem,
merci pour ta réponse.
En effet, utiliser d'autres redirecteurs est plus propre (on ne touche pas aux redirecteurs par défaut).
Merci à vous tous
Donut
Hors ligne