
Tengo un script de menú bash simple que funcionacasiperfecto. Pero por alguna razón, si no salgo del script usando la opción "Salir" O usando CTRL+CANTESCierro la ventana de mi terminal, luego el script entra en un bucle infinito y el uso de la CPU aumenta del 4 % al 50 %. Luego tengo que eliminar el script usando "kill -9 bash" para que el uso de mi CPU vuelva a disminuir. Pero si salgo del script usando "Salir" o "CTRL+C", entonces funciona bien.
Por supuesto, en un mundo perfecto, siempre saldría primero antes de cerrar mi sesión de terminal, pero una vez que ponga esto en mi flujo de trabajo, seguramente llegará un momento en el que me olvidaré y cerraré la sesión de terminal sin salir primero del script. Y luego el uso de mi CPU aumentará en segundo plano.
Sé que esto tiene algo que ver con el uso de " while true; do " porque no tenía este problema antes de comenzar a usarlo. Pero necesito "si bien es cierto; hacerlo", de lo contrario el submenú no mostrará las opciones del menú principal cuando regrese al menú principal. Entonces eso tuvo que implementarse.
¿Algunas ideas?
#!/bin/bash
main_menu () {
while true; do
clear
PS3='Select an option: '
options=("Option1" "Option2" "SubMenu" "Exit")
select opt in "${options[@]}";
do
case $opt in
"Option1")
echo ""
echo Option1
read -p ""
clear
break
;;
"Option2")
echo ""
echo Option2
read -p ""
clear
break
;;
"SubMenu")
while true; do
clear
PS3='Select an option: '
options=("SubMenu Option1" "SubMenu Option2" "Main Menu")
select opt in "${options[@]}"
do
case $opt in
"SubMenu Option1")
echo ""
echo "Sub-Menu Option1"
read -p ""
clear
break
;;
"SubMenu Option2")
echo ""
echo "Sub-Menu Option2"
read -p ""
clear
break
;;
"Main Menu")
break 3
;;
*) echo "invalid option"
;;
esac
done
done
;;
"Exit")
exit
;;
*) echo "invalid option"
;;
esac
done
done
}
main_menu