Script Shell tout en ligne de lecture de la boucle s'arrête après la première ligne

j'ai le script shell suivant. Le but est d'effectuer une boucle à travers chaque ligne du fichier cible (dont le chemin est le paramètre d'entrée du script) et de travailler contre chaque ligne. Maintenant, il semble que cela ne fonctionne qu'avec la toute première ligne du fichier cible et s'arrête après que cette ligne ait été traitée. Y a-t-il un problème avec mon scénario?

#!/bin/bash
# SCRIPT: do.sh
# PURPOSE: loop thru the targets 

FILENAME=
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 un couple de ssh des commandes.

61
demandé sur codeforester 2012-12-10 15:38:40

4 réponses

le problème est que do_work.sh exécute ssh commandes et par défaut ssh lit à partir de stdin qui est votre fichier d'entrée. En conséquence, seule la première ligne traitée, parce que ssh consomme le reste du fichier, et votre boucle while se termine.

pour éviter cela, passez l'option -n à votre commande ssh pour la faire lire de /dev/null à la place de stdin.

117
répondu dogbane 2012-12-10 11:56:30
L'option

SSH-n empêche de vérifier l'état de sortie de ssh lors de l'utilisation D'HEREdoc tout en raccordant la sortie à un autre programme. Il est donc préférable d'utiliser /dev/null comme stdin.

#!/bin/bash
while read ONELINE ; do
   ssh ubuntu@host_xyz </dev/null <<EOF 2>&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
6
répondu jacobm654321 2015-11-14 22:54:02

utilisez ssh -n ... pour exécuter vos commandes à distance via ssh.

1
répondu sjas 2016-12-07 12:30:02
#! /bin/bash
cat /root/host.txt | while read LINE
..
..

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

  1. article de la liste
-2
répondu mayur 2017-12-20 09:20:34