当我关闭终端会话时,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

相关内容