我试图通过,选择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: 这是代码(简化的-with只有一个子菜单-)
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如何强制选择显示菜单?注意:如果我将main_menu调用到choose_keyboard函数中,肯定会得到堆栈溢出错误!
发布于 2014-04-23 11:23:57
当您从内部break返回select时,重新输入顶部(主菜单) select --正如您发现的那样,由于在函数开始时没有重新执行命令,所以没有显示该菜单。相反,您可以立即跳出内部和外部选择,并将主菜单放在一个循环中,以便再次调用它,即:
1 ) loadkeys be-latin1; echo "AZERTY Keyboard configured"; break 2;;break 2将突破嵌套在另一个内部的选择,break 3将突破一个额外的嵌套级别,等等。然后,与其在底部调用main_menu,不如执行以下操作:
while :; do main_menu; done这是一个无限循环,每当您突破主菜单main_menu命令时,它都会调用select。您可能不希望它是无限的,您可以始终测试一个变量或其他什么。
https://stackoverflow.com/questions/23242109
复制相似问题