Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
560 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [shell] script appellé par un pipe, stocker la donnée d'entrée?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[shell] script appellé par un pipe, stocker la donnée d'entrée?

n°439967
duch
Posté le 24-03-2004 à 18:34:21  profilanswer
 

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
mood
Publicité
Posté le 24-03-2004 à 18:34:21  profilanswer
 

n°439978
AirbaT
Connection timed out
Posté le 24-03-2004 à 18:53:24  profilanswer
 

Et en passant betement par un fichier temp ? Tu peux utiliser les données autant de fois que tu veux ensuite.

n°439985
duch
Posté le 24-03-2004 à 18:58:32  profilanswer
 

pô bô :D
 
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.


Message édité par duch le 24-03-2004 à 18:59:40
n°440181
david07
Posté le 24-03-2004 à 21:18:10  profilanswer
 

Et en utilisant $?
cat file|grep -q "pattern"
if $?
then
....

n°440314
aigles
Posté le 24-03-2004 à 22:48:42  profilanswer
 

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'
 
 


---------------
Jean Pierre.
n°440317
duch
Posté le 24-03-2004 à 22:51:20  profilanswer
 

David07 a écrit :

Et en utilisant $?
cat file|grep -q "pattern"
if $?
then
....


 
 
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


Message édité par duch le 24-03-2004 à 22:52:37
n°440322
duch
Posté le 24-03-2004 à 22:55:47  profilanswer
 

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.

n°440323
aigles
Posté le 24-03-2004 à 22:57:10  profilanswer
 

Quels traitements veux tu faire sur le flux de données ?


---------------
Jean Pierre.
n°440329
arghbis
salops de dauphins
Posté le 24-03-2004 à 22:59:57  profilanswer
 

la commande tee ne peut pas t'aider?

n°440333
duch
Posté le 24-03-2004 à 23:02:38  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [shell] script appellé par un pipe, stocker la donnée d'entrée?

 

Sujets relatifs
script et find[résolu][SHELL] Aide pour un script de découpage de fichier
Comment rajouter une entrée de man dans le MANPATH?script shell pour la suppression de virtualhost dans httpd.conf ??
Récupèrer la valeur passée dans le pipe avec un script shellscript : detecter si un programme est lancé
Plus de sujets relatifs à : [shell] script appellé par un pipe, stocker la donnée d'entrée?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR