bash - resueltos - Script de shell mientras el ciclo de la línea de lectura se detiene después de la primera línea
scripts linux ejercicios resueltos (4)
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 resto 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.
Tengo el siguiente script de shell. El objetivo 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"
La opción ssh -n evita verificar el estado de salida de ssh cuando se usa HEREdoc mientras se canaliza la salida a otro programa. Por lo tanto, se prefiere el uso de / dev / null como 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
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
- Artículo de lista