This is my below bash script
#!/bin/bash
verify()
{
while true;do
read -p "Have you fixed? Yes/No: " yn
case $yn in
YES|Yes|yes|y|Y)
printf "Hola"
check_status
break
#continue
;;
NO|No|no|n|N)
printf "Please fix"
;;
*)
printf "Please answer yes or no.\n"
;;
esac
done
}
check_status()
{
while IFS=" " read -r rec1 rec2
do
if [ $rec2 == 'up' ]
then
echo "$rec1 is up"
else
echo "$rec1 is down so please fix"
verify
fi
done < <(cut -d " " -f1,2 compute_list)
}
check_status
y mi lista de cálculo es
abcd up
efgh down
..
Y siempre está dando
no muestra la linea
¿Has arreglado? Sí No:
Pero está mostrando lo siguiente infinitamente
Por favor responda si o no? Por favor responda si o no?
bucle infinito muestra los mismos mensajes una y otra y otra vez
Alguna ayuda
Solución del problema
Su función externa ha redirigido la entrada estándar para leer desde la cutsustitución del proceso, por lo que es de donde readse lee su entrada.
Quizás use un descriptor de archivo separado para la sustitución del proceso.
Además, su verifyfunción vuelve a llamar recursivamente check_status; ¡probablemente saque eso!
verify()
{
while true;do
read -p "Have you fixed? Yes/No: " yn
case $yn in
YES|Yes|yes|y|Y)
echo "Hola"
# check_status # DON'T!
break
;;
NO|No|no|n|N)
echo "Please fix"
;;
*)
echo "Please answer yes or no."
;;
esac
done
}
check_status()
{
# Notice read -u 3 to read from fd3
# Notice _ to read fields 3 and up
while IFS=" " read -u 3 -r rec1 rec2 _
do
# Syntax: single =, add quoting
if [ "$rec2" = 'up' ]
then
echo "$rec1 is up"
else
echo "$rec1 is down so please fix"
verify
fi
# Notice 3<
done 3< compute_list
}
check_status
También me tomé la libertad de corregir su sangría y evitar la sustitución innecesaria del proceso; readpuede leer perfectamente y descartar los campos posteriores al segundo.
printfes más versátil que echopero en este caso, cuando simplemente desea generar cadenas estáticas, cambié a echo.
Demostración: https://ideone.com/pVerFm
(lo dejé en el proceso de sustitución allí en caso de que quieras ver cómo se ve sintácticamente).
No hay comentarios:
Publicar un comentario