
У меня есть простой скрипт меню bash, который работаетпочтиидеально. Но по какой-то причине, если я не выйду из скрипта с помощью опции "Выход" ИЛИ с помощью CTRL+CДОЯ закрываю окно терминала, затем скрипт входит в бесконечный цикл, и загрузка ЦП увеличивается с 4% до 50%! Затем мне приходится убивать скрипт с помощью "kill -9 bash", чтобы снова снизить загрузку ЦП. Но если я выйду из скрипта с помощью "Exit" или "CTRL+C", то все будет работать нормально.
Конечно, в идеальном мире я бы просто всегда сначала выходил, прежде чем закрывать сеанс терминала, но как только я включу это в свой рабочий процесс, наверняка наступит момент, когда я забуду и закрою сеанс терминала, не выйдя из скрипта. И тогда у меня возрастет загрузка ЦП в фоновом режиме.
Я знаю, что это как-то связано с использованием "while true; do", потому что у меня не было этой проблемы до того, как я начал его использовать. Но мне нужно "while true; do", иначе SubMenu не будет показывать опции главного меню при возврате в главное меню. Так что это пришлось реализовать.
Есть идеи?
#!/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