2014-04-23 38 views
2

我想在通過選擇選擇做一個完整的BASH 菜單子菜單擊子菜單(SELECT選擇加入)

問題:當我去一個子菜單,然後回到初始菜單,它不顯示選項。

---------------------------------------------- 
      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: 

這是代碼(簡化 - 附只有一個submenu-)

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函數,我肯定會獲得一個stackoverflow錯誤!

回答

2

當你從內selectbreak,你重新進入頂部(主菜單)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命令。你可能不希望它是無限的,你可以隨時測試一個變量或其他東西。

+0

這是完全按照需要工作! –