
我有一個簡單的 bash 選單腳本可以使用幾乎完美的。但由於某種原因,如果我不使用“退出”選項或使用 CTRL+C 退出腳本前我關閉終端機窗口,然後腳本進入無限循環,CPU 使用率從 4% 上升到 50%!然後我必須使用「kill -9 bash」終止腳本才能讓我的 CPU 使用率再次下降。但如果我使用“退出”或“CTRL+C”退出腳本,那麼它就可以正常工作。
當然,在完美的世界中,我總是會在關閉終端會話之前先退出,但是一旦我將其放入我的工作流程中,肯定會有一天我忘記並關閉終端會話而不先退出腳本。然後我的 CPU 使用率就會在背景上升。
我知道這與使用“while true; do”有關,因為在開始使用它之前我沒有遇到這個問題。但我需要“while true; do”,否則返回主選單時子選單將不會顯示主選單選項。因此必須實施這一點。
有任何想法嗎?
#!/bin/bash
main_menu () {
while true; do
clear
PS3='Select an option: '
options=("Option1" "Option2" "SubMenu" "Exit")
select opt in "${options[@]}";
do
case $opt in
"Option1")
echo ""
echo Option1
read -p ""
clear
break
;;
"Option2")
echo ""
echo Option2
read -p ""
clear
break
;;
"SubMenu")
while true; do
clear
PS3='Select an option: '
options=("SubMenu Option1" "SubMenu Option2" "Main Menu")
select opt in "${options[@]}"
do
case $opt in
"SubMenu Option1")
echo ""
echo "Sub-Menu Option1"
read -p ""
clear
break
;;
"SubMenu Option2")
echo ""
echo "Sub-Menu Option2"
read -p ""
clear
break
;;
"Main Menu")
break 3
;;
*) echo "invalid option"
;;
esac
done
done
;;
"Exit")
exit
;;
*) echo "invalid option"
;;
esac
done
done
}
main_menu