Bash Menu - Вернуться в главное меню из SubMenu? - PullRequest
0 голосов
/ 22 мая 2019

У меня есть простое меню Bash здесь.Кажется, все работает отлично, за исключением того, что я не могу понять, как вернуться в главное меню из моего SubMenu.После выполнения сценария я выбираю «3», чтобы перейти в «SubMenu» оттуда, я снова нажимаю «3», чтобы вернуться в «Главное меню», но вместо этого он просто показывает мне опции «SubMenu».

Я попытался заменить «break» на «./menu.sh», который является названием моего скрипта, который, кажется, работает, однако я уверен, что это, вероятно, не самый идеальный способ решения этой проблемы.

#!/bin/bash
clear

while true
do
clear

echo "######"
echo " Menu"
echo "######"
echo ""

PS3='Select an option: '
options=("Option1" "Option2" "SubMenu" "Exit")

select opt in "${options[@]}"
do
    case $opt in
        "Option1")
            echo Option1
            read -p ""
            break
            ;;
        "Option2")
            echo Option2
            read -p ""
            break
            ;;
        "SubMenu")
            while true
            do
            clear
            echo "#########"
            echo " SubMenu"
            echo "#########"
            echo ""
            PS3='Select an option: '
            options=(
              "SubMenu Option1"
              "SubMenu Option2"
              "Main Menu"
            )
            select opt2 in "${options[@]}"
            do
              case $opt2 in
                  "SubMenu Option1")
                      echo "Sub-Menu Option1"
                      read -p ""
                      break
                      ;;
                  "SubMenu Option2")
                      echo "Sub-Menu Option2"
                      read -p ""
                      break
                      ;;
                    "Main Menu")
                      "./menu"
                      ;;
                  *) echo "invalid option";;
            esac
          done
        done
            ;;
        "Exit")
            exit
            ;;
        *) echo "invalid option"
           ;;
    esac
  done
done

1 Ответ

0 голосов
/ 22 мая 2019

Прежде всего, break вырвется из select. Чтобы выйти из подменю while, вам нужно break 3 (чтобы выйти из внутреннего select, подменю while и внешнего select).

Введите help break для получения дополнительной информации.

Короткая заметка о вашем другом подходе, повторный вызов сценария: вы не должны запускать новый дочерний процесс с каждой итерацией. Bash предлагает элегантный способ «перезапуска» программы:

exec "$0"

Это выполнит данный исполняемый файл (в данном случае $0 - текущий скрипт) в текущем процессе. См. exec() системный вызов для получения дополнительной информации или введите help exec, чтобы прочитать особенности Bash.

...