В настоящее время у меня нет Ubuntu на ноутбуке, но я считаю, что он должен быть в: Системные настройки> Питание, у вас должна быть возможность выбрать, что делать, когда крышка закрыта.
Вы можете использовать что-то вроде этого:
$(basename $0) && exit
$(basename $0) создаст новый экземпляр текущего скрипта, а exit выйдет из текущего экземпляра скрипта.
Вот тестовый скрипт, в котором подчеркивается описанный выше метод:
#!/bin/bash
if ! [[ $count =~ ^[0-9]+$ ]] ; then
export count=0
fi
echo $count
if [ $count -le 10 ]; then
count=$(echo "$count+1" | bc)
./$(basename $0) && exit #this will run if started from the same folder
fi
echo "This will be printed only when the tenth instance of script is reached"
Если вы не используете export count=0 (которые делают count как переменную среды) и используют только (которые делают cont локальной переменной скрипта), тогда скрипт никогда не остановится.
Надежность получения скрипта, который в настоящее время выполняется, сложнее, чем вы думаете. См. Http://mywiki.wooledge.org/BashFAQ/028.
Вместо этого вы можете сделать что-то вроде этого:
main_menu() {
printf '1. Do something cool\n'
printf '2. Do something awesome\n'
: ... etc
}
some_sub_sub_menu() {
...
printf 'X. Return to main menu\n'
...
if [[ $choice = [Xx] ]]; then
exit 255
fi
}
while true; do
(main_menu)
res=$?
if (( res != 255 )); then
break
fi
done
В основном вы запускаете функцию main_menu в подоболочка, поэтому, если вы выходите из main_menu или любого из подменю, вы выходите из подоболочки, а не из основной оболочки. статус выхода 255 выбирается здесь для обозначения «идти снова». Любой другой статус выхода будет выходить из бесконечного цикла.