22
0
Fork 0

TipsShell: Ajouter conflit stdin

This commit is contained in:
Alexis Ben Miloud--Josselin 2022-09-07 15:31:46 +02:00
parent 6bc29c7df6
commit 1e366dbd4c
1 changed files with 40 additions and 0 deletions

View File

@ -583,6 +583,46 @@ Détecter les tabulations
$ grep -P '\t'
~~~
## Conflit sur `stdin`
Rediriger `stdin` peut être nécéssaire, par exemple, lorsquon combine une boucle `while read`, un _here-document_ et des commandes interactives.
Dans la boucle suivante, lorsquon rentre dans la boucle, la variable `hostname` contient bien «server1».
~~~ { .bash }
while read hostname
do
ssh "${hostname}"
done << eof
server1
server2
eof
~~~
On peut sattendre à ce quau prochain tour de boucle, `hostname` contienne «server2», mais lorsque la commande `ssh` sera exécutée durant le premier passage de la boucle, cest bien `ssh` qui va consommer la ligne «server2»! Pour empêcher ça, on peut faire lire un autre descripteur de fichier, comme `3`, à `read` et envoyer le _here-document_ dessus:
~~~ { .bash }
while read hostname 0<&3
do
ssh "${hostname}"
done 3<< eof
server1
server2
eof
~~~
On peut aussi faire lire au autre descripteur de fichier à `ssh` à la place:
~~~ { .bash }
while read hostname
do
ssh "${hostname}" 0<&3
done 3<&0 << eof
server1
server2
eof
~~~
# Serveur mail
## Avoir vision des différentes erreurs mailq (MAILER-DAEMON)