non c’est pas ça que je cherche … regardez :
Il est “facile” de savoir ce que stdout, qu’il soit standard ou non, envoie dans la commande 2, et en effet, ça n’est pas des paramètres, mais un flux (comme une pièce jointe à un mail). Exemple:
commande1: ls
commande2: un script maison
$ commande1 | commande2 > /tmp/fic
Mes questions sont:
-
Est-ce que dans le code de commande1 /tmp/fic est visible, au sens ou déjà dans commande1 on sait vers où va être redirigé la sortie (SDTOUT ou un fichier de nom ‘fic’ ? je ne pense pas, d’autant qu’elle est pipée.
-
Est-ce que dans le code de commande1 toujours, bash sait, et donc peut nous dire, vers où va être redirigé la sortie (vers l’entrée de commande2 via le pipe, en l’occurence).
-
Là où ça m’interesse le plus en fait, c’est :
Est-ce que dans commande2, je peux, dans un bloc de code, connaître (question identique aux autres) la redirection, en tant que descripteur, sans me préoccuper de son contenu, ou de ce qu’il va devenir.
J’illustre l’exemple avec commande1 et commande2, dans un terminal:
On a ici une redirection des 2 flux de sortie vers le fichier. (on pourrait surement simplifier par &>/tmp/fic !).
Mais, dans le code de commande2, on :
[code]#!/bin/bash
je peux récuperer les options et les paramètre, mais aussi le flux puisque ce script reçoit la sortie d’une commande pipée.
etat=0
nom=
while [ -z “$1” ]; do
opt="$1"
je traite les options et les paramètres, ex:
case “$opt” in
-e*) etat=1 ;;
… etc …
*) # là c’est un paramètre par exemple
nom="$opt" ;;
esac
shift
done
Maintenant qu’on a les options et les paramètres, on traite :
en réalité, même si ça n’est pas interdit, je récupère un paramètre
pour montrer plus tard, mais l’exécution de ce script ne se limite pas
au traitement de l’option etat' et du paramètre
nom’, et pour cause,
il reçoit un flux, et je le récupère comme ça:
while read line; do
là je traite ce qui est reçu
if [ -n “$nom” ] && [ “$line” = “toto” ]; then
echo "blahblahblah $nom papaute"
fi
done< &0
exit 0[/code]
Donc, je vais retrouver dans /tmp/fic : `blahblahblah toto papaute’ x fois … ça c’est ok.
Maintenant, comment je fais si je veux modifier le test if :
# là je traite ce qui est reçu
if [ -n "$nom" ]; then
if [ "$line" = "toto" ]; then
echo "blahblahblah $nom papaute"
elif [ "$line" = "cocofaitdupiedatoto" ]; then
# et c'est là que ça coince parce que je veux remettre le fichier à zéro:
> /tmp/fic # le blem, c'et que je ne le connais pas d'ici .. juste ?
fi
fi