私が使用する単純な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