Das Bash-Menüskript „Auswählen“ geht in eine Endlosschleife, wenn ich meine Terminalsitzung schließe

Das Bash-Menüskript „Auswählen“ geht in eine Endlosschleife, wenn ich meine Terminalsitzung schließe

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

verwandte Informationen