
Ich habe ein einfaches Bash-Menü-Skript, das funktioniertfastperfekt. Aber aus irgendeinem Grund, wenn ich das Skript nicht mit der Option "Beenden" ODER mit STRG+C verlasseVORIch schließe mein Terminalfenster, dann geht das Skript in eine Endlosschleife und die CPU-Auslastung steigt von 4 % auf 50 %! Dann muss ich das Skript mit „kill -9 bash“ beenden, damit meine CPU-Auslastung wieder sinkt. Aber wenn ich das Skript mit „Beenden“ oder „STRG+C“ beende, funktioniert es einwandfrei.
Natürlich würde ich in einer perfekten Welt immer zuerst „Beenden“ ausführen, bevor ich meine Terminalsitzung schließe, aber wenn ich das einmal in meinen Arbeitsablauf eingebaut habe, wird es mit Sicherheit eine Zeit geben, in der ich es vergesse und die Terminalsitzung schließe, ohne vorher das Skript zu beenden. Und dann steigt meine CPU-Auslastung im Hintergrund.
Ich weiß, dass dies etwas mit der Verwendung von „while true; do“ zu tun hat, da ich dieses Problem nicht hatte, bevor ich damit angefangen habe. Aber ich brauche „while true; do“, sonst zeigt das Untermenü die Hauptmenüoptionen nicht an, wenn ich zum Hauptmenü zurückkehre. Das musste also implementiert werden.
Irgendwelche Ideen?
#!/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