Restauration redirection stdin

Restauration redirection stdin - Shell/Batch - Programmation

Marsh Posté le 17-01-2005 à 02:19:38    

Bonjour, j'utilise la commande exec en bash pour lire dans un fichier... je joins un extrait de mon code ou je traite les lignes du fichiers une par une dans la boucle while (true).
Le problème est que le programme semble quitter a l'instruction done et donc les traitements ultérieurs (ici l'écriture a l'écran) ne sont pas traités......
 
#!/bin/bash
 fichier=$1
 exec 6<&0
 exec < ./asi05.txt
 
 while (true)
 do
  read ligne
  if [ "$ligne" = "" ] ; then
   exit $FIN
  fi
  echo "in"
 done;
 echo "out"
 exec 0<&6 6<&-
 exit 50
 
Pouvez vous m'éclairer a ce sujet la ?? :) merci


Message édité par le3zi le 17-01-2005 à 20:58:46
Reply

Marsh Posté le 17-01-2005 à 02:19:38   

Reply

Marsh Posté le 17-01-2005 à 15:45:18    

A mon avis il quitte sur le exit $FIN... En général un read ça ce fait avec un while (read) do ... done.

Reply

Marsh Posté le 17-01-2005 à 15:55:23    

pour restaurer stdin, il faut faire un exec sans argument ,de mémoire.


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 17-01-2005 à 20:57:30    

Bien sur !! il quitte sur $FIN ! J'ai tellement planché la dessus et sur la doc de exec... que j'ai pas vu cette voie la... Merci matafan ! Par contre, comment tu gères la boucle ?   quand je fais un while (read), il n'y a qu'un passage de boucle, alors que le fichier avec lequel je teste ca comporte 3 lignes.

Reply

Marsh Posté le 17-01-2005 à 20:58:28    

Zaib3k, je crois pas avoir bien compris ce que tu voulais me dire. Je dois lancerl a commande "exec" tout simplement, sans arguments ?  ce que j'ai fais n'est pas bon ?

Reply

Marsh Posté le 17-01-2005 à 21:00:20    

le3zi a écrit :

Zaib3k, je crois pas avoir bien compris ce que tu voulais me dire. Je dois lancerl a commande "exec" tout simplement, sans arguments ?  ce que j'ai fais n'est pas bon ?


 
je repondais juste au titre du topic.
 
sinon pour la boucle,  
 

while read ligne; do
  echo $ligne
done < fichier


 
ca devrait t'aider ;)


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 17-01-2005 à 21:01:02    

On peut dire que c'est une réponse rapide, je vais tester ca ... merci

Reply

Marsh Posté le 17-01-2005 à 21:02:45    

ca a l'air de bien marcher... cela dit.. comment donner un descripteur a mon fichier... la j'utilise 6 dans l'exemple (ca été repris d'un site) mais je ne vois pas trop a quoi ca correspond...

Reply

Marsh Posté le 17-01-2005 à 21:07:04    

si tu n'as pas besoin d'un descripteur precis, garde celui par defaut ;)


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 17-01-2005 à 21:08:19    

6 est le descripteur par défaut ?

Reply

Marsh Posté le 17-01-2005 à 21:08:19   

Reply

Marsh Posté le 17-01-2005 à 21:11:26    

ha non :) les descripteurs standard sont 0 1 et 2
stdin 0
stdout 1
stderr 2


---------------
Le droit à la différence s'arrête là où ça commence à m'emmerder sérieusement.
Reply

Marsh Posté le 18-01-2005 à 01:19:06    

Oui.. ceux la je sais :) mais est ce que par exemple :
 
- Enregistrement de stdin et redirection vers mon fichier:
   exec 6<&0
   exec < $fichier
 
- Traitement avec des read dans le fichier
 
- Restauration de stdin
   exec 0<&6 6<&-
 
Est ce que ceci est correct ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed