lancer un éditeur texte dans une boucle shell

Daniel Caillibaud ml at editionsdidier.com
Tue Aug 7 11:21:01 CEST 2007


Bonjour,

Je suis devant un comportement de joe dans un while que je ne comprend pas.

J'ai une liste de fichiers à éditer pour contrôle et modifs éventuelles, j'ai donc lancé un

while read f; do joe $f; done < fichiers.list

mais
- si fichiers.list commence par une ligne vide, ça m'ouvre joe avec un nouveau fichier qui contient le contenu de 
fichiers.list (comme si joe recevait $f sur son entrée standard et pas comme argument),
- sinon, ça ouvre le premier fichier en y ajoutant à la fin la suite de fichiers.list (les noms des fichiers de la 
liste, pas leur contenu)

alors que

while read f; do echo $f|xargs joe; done < fichiers.list
ou bien
for f in $(cat fichiers.list); do joe $f;done;

ont bien l'effet escompté (ouvre le premier fichier de la liste et passe au suivant à chaque fermeture de fichier).

J'ai aussi testé avec nano, mais seule la solution avec le for fonctionne, les autres donnent du "Received SIGHUP or 
SIGTERM"

Une explication ?

-- 
Daniel

PS: pour ceux qui veulent tester

# le contenu de test

mkdir tmp
cd tmp
echo -e "tata\nbla\nblabla" >tata
echo -e "titi\nbli\nblibli" >titi
echo -e "toto\nblo\nbloblo" >toto
echo -e "tata\ntiti\ntoto">fichiers.list
echo >liste2
# et les tests

while read f; do joe $f; done < fichiers.list
while read f; do echo $f|xargs joe; done < fichiers.list
for f in $(cat fichiers.list); do joe $f;done;

while read f; do joe $f; done < liste2

while read f; do nano $f; done < fichiers.list
while read f; do echo $f|xargs nano; done < fichiers.list
for f in $(cat fichiers.list); do nano $f;done;


More information about the Shell mailing list