Script de shell alors que la boucle de ligne de lecture s’arrête après la première ligne

J’ai le script shell suivant. Le but est de parcourir chaque ligne du fichier cible (dont le chemin est le paramètre d’entrée du script) et de travailler sur chaque ligne. Maintenant, il semble seulement fonctionner avec la toute première ligne dans le fichier cible et s’arrête une fois que cette ligne a été traitée. Y a-t-il quelque chose qui cloche avec mon script?

#!/bin/bash # SCRIPT: do.sh # PURPOSE: loop thru the targets FILENAME=$1 count=0 echo "proceed with $FILENAME" while read LINE; do let count++ echo "$count $LINE" sh ./do_work.sh $LINE done < $FILENAME echo "\ntotal $count targets" 

Dans do_work.sh , je lance quelques commandes ssh .

Le problème est que do_work.sh exécute les commandes ssh et que ssh lit par défaut stdin qui est votre fichier d’entrée. Par conséquent, vous ne voyez que la première ligne traitée, car ssh consum le rest du fichier et votre boucle while se termine.

Pour éviter cela, passez l’option -n à votre commande ssh pour la faire lire depuis /dev/null au lieu de stdin.

L’option ssh -n empêche de vérifier l’état de sortie de ssh lors de l’utilisation de HEREdoc lors de la diffusion de la sortie vers un autre programme. L’utilisation de / dev / null en tant que stdin est donc préférable.

 #!/bin/bash while read ONELINE ; do ssh ubuntu@host_xyz &1 | filter_pgm echo "Hi, $ONELINE. You come here often?" process_response_pgm EOF if [ ${PIPESTATUS[0]} -ne 0 ] ; then echo "aborting loop" exit ${PIPESTATUS[0]} fi done << input_list.txt 

Utilisez ssh -n ... pour exécuter vos commandes distantes via ssh.

 #! /bin/bash cat /root/host.txt | while read LINE .. .. 

utiliser ssh -n -o SsortingctHostKeychecking=no dans le script do_work.sh

  1. Élément de la liste