lancer un éditeur texte dans une boucle shell

Daniel Caillibaud ml at editionsdidier.com
Tue Aug 7 18:58:02 CEST 2007


Vincent Lefevre a écrit :
> On 2007-08-07 17:13:01 +0200, Daniel Caillibaud wrote:
>> Vincent Lefevre a écrit :
>>> C'est peut-être parce que le processus n'a pas un stdin attaché au
>>> terminal ou un truc du genre, auquel cas le comportement peut varier
>>> d'un éditeur à un autre.
>> Oui, mais je comprend pas trop pourquoi ça réagit différemment entre
>>
>> while read f; do #commandes#; done<fichier
>> et
>> for f in `cat fichier`; do #commandes#; done;
> 
> Comme je l'ai dit, il peut y avoir un problème quand le processus n'a
> pas un stdin attaché au terminal (ce qui se produit avec la première
> ligne). Par exemple:

Mais pourquoi le for "propage" le stdin vers les commandes de la boucle et pas le while ?
Ce sont deux "shell keyword"... je comprend pas pourquoi ça réagit différemment.

> vin% cat file 
> foo.c
> vin% while read f; do emacs -nw $f; done < file
> emacs: standard input is not a tty
> vin%
> 
> Essaie plutôt un truc du style:
> 
>   while read f; do emacs -nw $f < $TTY; done < file

$ while read f; do joe $f <$TTY ; done <fichiers.list
-bash: $TTY: ambiguous redirect
-bash: $TTY: ambiguous redirect
..

> ou
> 
>   while read f <&3; do emacs -nw $f; done 3< file

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

marche comme attendu (idem for).
Merci Vincent, j'aurai pas trouvé ça tout seul ;-)

-- 
Daniel



More information about the Shell mailing list