GOOGLE ADS

sábado, 16 de abril de 2022

bash: bucle while yendo a bucle infinito mientras declaración de caso

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

Regla de Firestore para acceder a la generación de subcolección Permisos faltantes o insuficientes

Tengo problemas con las reglas de Firestore para permitir el acceso a algunos recursos en una subcolección. Tengo algunos requests document...