script appellé par un pipe, stocker la donnée d'entrée? [shell] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 24-03-2004 à 18:53:24
Et en passant betement par un fichier temp ? Tu peux utiliser les données autant de fois que tu veux ensuite.
Marsh Posté le 24-03-2004 à 18:58:32
pô bô
non il risque d'y avoir pas mal de fichier temp en même temps dans mon cas (c'est un filtre pour postfix), donc difficile à gerer.
Marsh Posté le 24-03-2004 à 21:18:10
Et en utilisant $?
cat file|grep -q "pattern"
if $?
then
....
Marsh Posté le 24-03-2004 à 22:48:42
Si tu tiens à conserver ton flux de données, je ne vois pas d'autre solution que de passer par un fichier temporaire comme l'a indiqué AirbaT.
Le nom du fichier doit être différent pour chaque exécution, pour cela il suffit d'y inclure le pid.
TempFile=/tmp/$(basename $0).$$
cat > $TempFile
if grep -q "pattern" $TempFile
then
. . .
fi
rm -f $TempFile
ou
TempFile=/tmp/$(basename $0).$$
if tee $TempFile | grep "pattern" > /dev/null
then
. . .
fi
rm -f $TempFile
On ne peut pas utiliser 'grep -q' avec 'tee' car le grep arrête de lire stdin dées qu'il à trouvé le pattern, du coup tee peut se planter en 'broken pipe'
Marsh Posté le 24-03-2004 à 22:51:20
David07 a écrit : Et en utilisant $? |
j'crois qu'on s'est pô compris, je ne cherche pas à récupérer le résultat du grep mais à pouvoir faire un grep sur le flux du stdin sans le perdre
Marsh Posté le 24-03-2004 à 22:55:47
merci aigles pour cette solution.
Je préferais ne pas passer par un fichier temporaire, mais si c'est là seule soluce
j'vais essayer ça.
Marsh Posté le 24-03-2004 à 22:57:10
Quels traitements veux tu faire sur le flux de données ?
Marsh Posté le 24-03-2004 à 23:02:38
je le pipe vers un autre script si une condition est remplie, sinon je sors du script.
En tous cas la soluce du fichier temporaire fonctionne, mais sans rien que pour le fun, c'est mieux
Marsh Posté le 24-03-2004 à 18:34:21
Salut,
J'ai un script qui est appellé avec un pipe. j'aimerais savoir comment stocker les données en entrée dans une variable?
j'ai un test avec grep à faire, et si je fais :
if cat | grep -q "pattern"
ensuite il n'y a plus rien dans cat puisque le flux a été envoyé dans grep, or j'en ai encore besoin ensuite (pour faire une action en fonction du test).
C'est pas clair?
j'aimerais en gros faire ceci :
if cat | grep -q "pattern"
then
cat > output1.txt # mais là cat est vide
else
cat > output2.txt # et là aussi
fi
comment faire? (il existe peut-être une autre façon de faire le grep sans niquer le flux)
Message édité par duch le 24-03-2004 à 18:58:44