Скрипт меню «выбрать» bash переходит в бесконечный цикл, когда я закрываю сеанс терминала

Скрипт меню «выбрать» bash переходит в бесконечный цикл, когда я закрываю сеанс терминала

У меня есть простой скрипт меню bash, который работаетпочтиидеально. Но по какой-то причине, если я не выйду из скрипта с помощью опции "Выход" ИЛИ с помощью CTRL+CДОЯ закрываю окно терминала, затем скрипт входит в бесконечный цикл, и загрузка ЦП увеличивается с 4% до 50%! Затем мне приходится убивать скрипт с помощью "kill -9 bash", чтобы снова снизить загрузку ЦП. Но если я выйду из скрипта с помощью "Exit" или "CTRL+C", то все будет работать нормально.

Конечно, в идеальном мире я бы просто всегда сначала выходил, прежде чем закрывать сеанс терминала, но как только я включу это в свой рабочий процесс, наверняка наступит момент, когда я забуду и закрою сеанс терминала, не выйдя из скрипта. И тогда у меня возрастет загрузка ЦП в фоновом режиме.

Я знаю, что это как-то связано с использованием "while true; do", потому что у меня не было этой проблемы до того, как я начал его использовать. Но мне нужно "while true; do", иначе SubMenu не будет показывать опции главного меню при возврате в главное меню. Так что это пришлось реализовать.

Есть идеи?

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

Связанный контент