O script de menu bash "select" entra em um loop infinito quando eu fecho minha sessão de terminal

O script de menu bash "select" entra em um loop infinito quando eu fecho minha sessão de terminal

Eu tenho um script de menu bash simples que funcionaquaseperfeito. Mas por algum motivo, se eu não sair do script usando a opção "Sair" OU usando CTRL+CANTESFecho a janela do terminal, o script entra em loop infinito e o uso da CPU sobe de 4% para 50%! Em seguida, tenho que encerrar o script usando "kill -9 bash" para que o uso da CPU diminua novamente. Mas se eu sair do script usando "Exit" ou "CTRL+C", ele funcionará perfeitamente.

É claro que em um mundo perfeito eu sempre sairia primeiro antes de fechar minha sessão de terminal, mas depois de colocar isso em meu fluxo de trabalho, certamente chegará um momento em que esquecerei e fecharei a sessão de terminal sem sair do script primeiro. E então terei meu uso de CPU aumentando em segundo plano.

Eu sei que isso tem algo a ver com o uso de "while true; do" porque eu não tive esse problema antes de começar a usá-lo. Mas preciso de "while true; do", caso contrário o SubMenu não mostrará as opções do Menu Principal ao voltar ao Menu Principal. Então isso teve que ser implementado.

Alguma ideia?

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

informação relacionada