내가 사용하는 간단한 bash 메뉴 스크립트가 있습니다거의완벽한. 그러나 어떤 이유로 "종료" 옵션을 사용하지 않거나 CTRL+C를 사용하여 스크립트를 종료하면앞으로터미널 창을 닫으면 스크립트가 무한 루프에 빠지고 CPU 사용량이 4%에서 50%로 늘어납니다! 그런 다음 CPU 사용량을 다시 낮추려면 "kill -9 bash"를 사용하여 스크립트를 종료해야 합니다. 그러나 "Exit" 또는 "CTRL+C"를 사용하여 스크립트를 종료하면 제대로 작동합니다.
물론 완벽한 세상에서는 항상 터미널 세션을 닫기 전에 로그아웃하겠지만, 일단 이것을 작업 흐름에 넣으면 스크립트에서 먼저 로그아웃하지 않고 잊어버리고 터미널 세션을 닫는 때가 분명히 올 것입니다. 그러면 백그라운드에서 CPU 사용량이 증가합니다.
나는 이것이 "while true; do"를 사용하는 것과 관련이 있다는 것을 알고 있습니다. 왜냐하면 사용하기 전에는 이 문제가 없었기 때문입니다. 하지만 "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