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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Descripteurs de fichiers, pipes...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Descripteurs de fichiers, pipes...

n°745657
e-miel
Posté le 27-10-2005 à 22:42:05  profilanswer
 

Soit A et B deux commandes UNIX (ou blocs de commandes). Si je veux que A parle à B, autrement dit que la sortie standard de A soit redirigée vers l'entrée standard de B, cela se note A | B. Comment faire pour que A parle à B et que B parle à A ?

mood
Publicité
Posté le 27-10-2005 à 22:42:05  profilanswer
 

n°745672
sebchap
Share the knowledge
Posté le 28-10-2005 à 00:12:37  profilanswer
 

Je n'ai pas le souvenir qu'il y ai une commande qui fasse ca simplement.
Tu n'as pas un exemple plus concret ?


---------------
BOFH excuse #400:We are Microsoft.  What you are experiencing is not a problem; it is an undocumented feature.
n°745675
Taz
bisounours-codeur
Posté le 28-10-2005 à 00:39:35  profilanswer
 

les pipe sont pas bi-directionnel dans ton shell

n°745679
MarmottePo​wer
Posté le 28-10-2005 à 00:49:52  profilanswer
 

Tu peux toujours te programmer un utilitaire qui redirige la sortie standard de A vers l'entree standard de B et inversement.
Avec les fonctions "pipe", "dup/dup2", "system" et "fork", ca doit pas etre bien long a faire mais avec des commandes qui n'ont pas ete pensees pour ca a la base, y a sans doute risque de boucle infinie.
 
--Edit--
T'as un exemple precis pour illustrer ce que tu voudrais faire ?


Message édité par MarmottePower le 28-10-2005 à 00:53:42
n°745684
Pillow
'cos the trees won't talk
Posté le 28-10-2005 à 01:35:33  profilanswer
 

Bah il veut juste des named pipes, nan ?

$ mkfifo A.fifo B.fifo
$ cat > A.sh << EOF
#! /bin/bash
 
while :
do
        read i < ./A.fifo
        echo $i bottles of beer on the wall, $i bottles of beer.
        echo $((i+1)) > ./B.fifo
done
EOF
$ cat > B.sh << EOF
#! /bin/bash
 
max=99
 
while :
do
        read i < ./B.fifo
        ((i-=2))
        if [ "$i" -le "0" ]
        then
                i=$max
                echo Take one down and pass it around, no more bottles of beer on the wall.
                echo
                echo No more bottles of beer on the wall, no more bottles of beer.
                echo Go to the store and buy some more, $i bottles of beer on the wall.
        else echo Take one down and pass it around, $i bottles of beer on the wall.
        fi
         
        echo    
 
        echo $i > A.fifo
done
EOF
$ chmod +x A.sh B.sh
$ ./A.sh &
$ ./B.sh &
$ echo 99 > A.fifo
99 bottles of beer on the wall, 99 bottles of beer.
Take one down and pass it around, 98 bottles of beer on the wall.
 
98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
 
97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of beer on the wall.
 
96 bottles of beer on the wall, 96 bottles of beer.
Take one down and pass it around, 95 bottles of beer on the wall.
 
95 bottles of beer on the wall, 95 bottles of beer.
Take one down and pass it around, 94 bottles of beer on the wall.
 
94 bottles of beer on the wall, 94 bottles of beer.
Take one down and pass it around, 93 bottles of beer on the wall.
 
93 bottles of beer on the wall, 93 bottles of beer.
Take one down and pass it around, 92 bottles of beer on the wall.
 
92 bottles of beer on the wall, 92 bottles of beer.
Take one down and pass it around, 91 bottles of beer on the wall.
 
91 bottles of beer on the wall, 91 bottles of beer.
Take one down and pass it around, 90 bottles of beer on the wall.
 
90 bottles of beer on the wall, 90 bottles of beer.
Take one down and pass it around, 89 bottles of beer on the wall.
 
89 bottles of beer on the wall, 89 bottles of beer.
Take one down and pass it around, 88 bottles of beer on the wall.
 
88 bottles of beer on the wall, 88 bottles of beer.
Take one down and pass it around, 87 bottles of beer on the wall.
 
87 bottles of beer on the wall, 87 bottles of beer.
Take one down and pass it around, 86 bottles of beer on the wall.
 
86 bottles of beer on the wall, 86 bottles of beer.
Take one down and pass it around, 85 bottles of beer on the wall.
 
[...etc...]

(on notera la grande valeur utilitaire de ces scripts [:dawao], ainsi que leur optimisation impressionante [:dawao] )

n°746076
e-miel
Posté le 28-10-2005 à 22:31:10  profilanswer
 

J'aurais aimé une réponse générale, c'est pourquoi je ne vous ai pas révélé les contenus de A et B, mais voici les détails :
 
Il y a 2 machines :
- "Développement" : ne contient aucune donnée à jour, mais sert à fournir du temps processeur pour des essais et des traitements lourds. Si cette machine plante c'est pas grâve.
- "Production" : contient les vraies données (toujours à jour, mais ça fait des gigas). Il est interdit de gaspiller du temps processeur sur cette machine, et si elle plante c'est la catastrophe.
 
Je dois faire des traitements lourds et risqués (donc exécutés sur la machine de "Développement") qui ont besoin de récupérer certaines données situées sur la machine de "Production".
 
J'avais donc pensé mettre tout mon Shell Script entre parenthèses (c'est A) et le faire dialoguer avec un ssh (c'est B) auquel A pourra envoyer des commandes (avec un echo) et récupérer les réponses en lisant l'entrée standard :

Code :
  1. ( ... tous mes traitements lourds et risqués ... ) | ssh production


J'ai déjà utilisé ce procédé pour transférer des fichiers, comme ceci :

Code :
  1. ( ... echo "get toto" ... traitement ... echo "get titi" ... traitement ... echo "put tata" ... ) | sftp production


Mais si j'ai envie de connaître le nombre de lignes d'un gros fichier, je préfère faire un echo "wc -l toto" plutôt qu'un echo "get toto".


Message édité par e-miel le 28-10-2005 à 22:32:37

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

  Descripteurs de fichiers, pipes...

 

Sujets relatifs
[linux] droit des fichiers à la création...importer des users ldap dans les fichiers locaux
serveur de fichiers sambaKonqueror en tant que gestionnaire de fichiers
tar et fichiers cachés....probleme pour ouvrir des fichiers
Récuperer des fichiers effacés sous Gnome ?GPL, redistribuer des fichiers modifiés ?
Partage fichiers entre Win XP et Linux Mandriva LE 2005 ?Les mystères de "printconf" : fichiers fantômes
Plus de sujets relatifs à : Descripteurs de fichiers, pipes...


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