Script de shell mientras el ciclo de la línea de lectura se detiene después de la primera línea

Tengo el siguiente script de shell. El objective es recorrer cada línea del archivo de destino (cuya ruta es el parámetro de entrada al script) y trabajar contra cada línea. Ahora, parece que solo funciona con la primera línea en el archivo de destino y se detiene después de que esa línea fue procesada. ¿Hay algo mal con mi 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" 

En do_work.sh , ejecuto un par de comandos ssh .

El problema es que do_work.sh ejecuta comandos ssh y, por defecto, ssh lee de stdin, que es su archivo de entrada. Como resultado, solo verá la primera línea procesada, porque ssh consume el rest del archivo y su ciclo while termina.

Para evitar esto, pase la opción -n a su comando ssh para hacer que lea desde /dev/null lugar de stdin.

La opción ssh -n evita verificar el estado de salida de ssh cuando se usa HEREdoc mientras se canaliza la salida a otro progtwig. Por lo tanto, se prefiere el uso de / dev / null como stdin.

 #!/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 

Use ssh -n ... para ejecutar sus comandos remotos a través de ssh.

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

use ssh -n -o StrictHostKeychecking=no en la do_work.sh comandos do_work.sh

  1. Artículo de lista