gpt4 book ai didi

linux - Bash 子菜单(选择加入)

转载 作者:太空狗 更新时间:2023-10-29 12:16:23 24 4
gpt4 key购买 nike

我正在尝试通过select opt in制作一个带有子菜单的完整BASH菜单。

问题:当我转到子菜单然后返回初始菜单时,它不显示选项。

----------------------------------------------
Greenwatch's Kiosk debug menu
----------------------------------------------

1) Keyboard Layout, 5) Configure Kiosk's password,
2) Timezone configuration, 6) Set Proxy,
3) -, 7) Remove Proxy
4) Launch Kiosk anyway,
Enter your choice (mainmenu), press 0 to reboot: 1


1) Azerty layout (BE)
2) Querty layout (US)
3) Cancel
Enter your choice (submenu): 1
AZERTY Keyboard configured

Enter your choice (mainmenu), press 0 to reboot:

这是代码(简化 - 只有一个子菜单 - )

choose_keyboard() {
show_title "Choose your keyboard layout"
clear;
select opt in "Azerty layout (BE)" "Querty layout (US)" "Cancel"; do
case "$REPLY" in
1 ) loadkeys be-latin1; echo "AZERTY Keyboard configured"; break;;
2 ) loadkeys us; echo "QWERTY Keyboard configured"; break;;
3 ) echo "Canceled"; break;;
777 ) break;;
*) echo "This is not a valid option, retry";;
esac
done
}
main_menu() {
show_title "$title"
select opt in "${options[@]}"; do
case "$REPLY" in
0 ) show_title "See you as late as possible!"; sudo systemctl reboot;;
1 ) choose_keyboard;;
2 ) choose_timezone;;
3 ) lauch_kiosk;;
4 ) choose_password;;
5 ) choose_ipconfig;;
6 ) choose_proxy;;
7 ) choose_testlab;;
777 ) break;;
*) echo "This is not a valid option, retry";;
esac
done
}
main_menu

如何强制select显示菜单?注意:如果我在 choose_keyboard 函数中调用 main_menu,我肯定会得到一个 stackoverflow 错误!

最佳答案

当您从内部 selectbreak 时,您会重新进入顶部(主菜单)select - 正如您所发现的,没有显示菜单,因为您没有重新执行函数开头的命令。相反,您可以立即跳出内部和外部选择,并将主菜单置于循环中以便再次调用它,即:

1 ) loadkeys be-latin1; echo "AZERTY Keyboard configured"; break 2;;

break 2 将跳出嵌套在另一个选择中的选择,break 3 将跳出额外的嵌套级别,等等。然后不仅仅是调用 main_menu 在底部,执行如下操作:

while :; do main_menu; done

这是一个无限循环,只要您跳出主菜单 select 命令,它就会调用 main_menu。你可能不希望它是无限的,你总是可以针对变量或那里的东西进行测试。

关于linux - Bash 子菜单(选择加入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23242109/

24 4 0