首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash子菜单(选择opt )

Bash子菜单(选择opt )
EN

Stack Overflow用户
提问于 2014-04-23 10:51:55
回答 1查看 2K关注 0票数 2

我试图通过,选择opt in来制作一个完整的带有子菜单的BASH菜单。

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

代码语言:javascript
复制
----------------------------------------------
          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只有一个子菜单-)

代码语言:javascript
复制
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函数中,肯定会得到堆栈溢出错误!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-23 11:23:57

当您从内部break返回select时,重新输入顶部(主菜单) select --正如您发现的那样,由于在函数开始时没有重新执行命令,所以没有显示该菜单。相反,您可以立即跳出内部和外部选择,并将主菜单放在一个循环中,以便再次调用它,即:

代码语言:javascript
复制
1 ) loadkeys be-latin1; echo "AZERTY Keyboard configured"; break 2;;

break 2将突破嵌套在另一个内部的选择,break 3将突破一个额外的嵌套级别,等等。然后,与其在底部调用main_menu,不如执行以下操作:

代码语言:javascript
复制
while :; do main_menu; done

这是一个无限循环,每当您突破主菜单main_menu命令时,它都会调用select。您可能不希望它是无限的,您可以始终测试一个变量或其他什么。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23242109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档