當我關閉終端機會話時,bash「選擇」選單腳本進入無限循環

當我關閉終端機會話時,bash「選擇」選單腳本進入無限循環

我有一個簡單的 bash 選單腳本可以使用幾乎完美的。但由於某種原因,如果我不使用“退出”選項或使用 CTRL+C 退出腳本我關閉終端機窗口,然後腳本進入無限循環,CPU 使用率從 4% 上升到 50%!然後我必須使用「kill -9 bash」終止腳本才能讓我的 CPU 使用率再次下降。但如果我使用“退出”或“CTRL+C”退出腳本,那麼它就可以正常工作。

當然,在完美的世界中,我總是會在關閉終端會話之前先退出,但是一旦我將其放入我的工作流程中,肯定會有一天我忘記並關閉終端會話而不先退出腳本。然後我的 CPU 使用率就會在背景上升。

我知道這與使用“while true; do”有關,因為在開始使用它之前我沒有遇到這個問題。但我需要“while true; do”,否則返回主選單時子選單將不會顯示主選單選項。因此必須實施這一點。

有任何想法嗎?

#!/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

相關內容