El script del menú "select" de bash entra en un bucle infinito cuando cierro mi sesión de terminal

El script del menú "select" de bash entra en un bucle infinito cuando cierro mi sesión de terminal

Tengo un script de menú bash simple que funcionacasiperfecto. Pero por alguna razón, si no salgo del script usando la opción "Salir" O usando CTRL+CANTESCierro la ventana de mi terminal, luego el script entra en un bucle infinito y el uso de la CPU aumenta del 4 % al 50 %. Luego tengo que eliminar el script usando "kill -9 bash" para que el uso de mi CPU vuelva a disminuir. Pero si salgo del script usando "Salir" o "CTRL+C", entonces funciona bien.

Por supuesto, en un mundo perfecto, siempre saldría primero antes de cerrar mi sesión de terminal, pero una vez que ponga esto en mi flujo de trabajo, seguramente llegará un momento en el que me olvidaré y cerraré la sesión de terminal sin salir primero del script. Y luego el uso de mi CPU aumentará en segundo plano.

Sé que esto tiene algo que ver con el uso de " while true; do " porque no tenía este problema antes de comenzar a usarlo. Pero necesito "si bien es cierto; hacerlo", de lo contrario el submenú no mostrará las opciones del menú principal cuando regrese al menú principal. Entonces eso tuvo que implementarse.

¿Algunas ideas?

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

información relacionada