Я написал простую программу .desktop с сопровождающим скриптом. Это сработало недавно, но, кажется, прекратилось без причины. Теперь он просто открывает терминал (ожидается), но вместо запуска остальной программы он мгновенно закрывает окно. По сути, он открывается, а затем мгновенно закрывает окно терминала, не запуская (или так кажется) ни один из сценариев.
Вот код для обоих: сначала сценарий, а затем файл .desktop:
#!/bin/bash
selection=
until [ "$selection" = "ENTER" ]; do
echo "
SHUTDOWN:
C - Cancel shutdown and quit
ENTER - Accept shutdown timer (3 hours) and quit
"
read selection
echo ""
case $selection in
[Cc]) exit;;
"") echo "Shutting down... 'sudo shutdown -c' to cancel"
sleep 5
sudo shutdown -h 180
*) echo "Please enter either C or Press [ENTER]"
esac
done
вот файл рабочего стола:
[Desktop Entry]
Name=Shutdown Script
Comment=shutdown in 3 hours
Exec="/home/nate/Update-Clean/shutdown script"
Terminal=true
Type=Application
Icon=/home/nate/Update-Clean/icons/computer-fail.png
Name[en_US]=Shutdown
Как он перестал работать ?! 116 , во что бы то ни стало!)
Спасибо за тонну!
РЕДАКТИРОВАТЬ:
Я добавил простой "выход ;;" к сценарию. Может ли это быть все?
изменить:
case $selection in
[Cc]) exit;;
"") echo "Shutting down... 'sudo shutdown -c' to cancel"
sleep 5
sudo shutdown -h 180
exit;;
*) echo "Please enter either C or Press [ENTER]"
Всегда пробуйте скрипт, запуская его из командной строки. Если вы это сделаете, вы увидите следующее сообщение
:~$ ./test.sh
./test.sh: line 20: syntax error near unexpected token `)'
./test.sh: line 20: ` *) echo "Please enter either C or Press [ENTER]"'
Если вы посмотрите руководство по bash, вы увидите следующий синтаксис:
case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac
Это означает, что после команд чтобы быть выполненным, вам нужно добавить ;;
(не обязательно после оператора exit
!). Следующий оператор case
также работает:
case $selection in
[Cc]) exit;;
"") echo "Shutting down... 'sudo shutdown -c' to cancel"
sleep 5
sudo shutdown -h 180
;;
*) echo "Please enter either C or Press [ENTER]"
;;
esac
ОК, но это скучный ответ , Вы знаете, что - вы хотите интерактивную программу. Вы запускаете его в графическом интерфейсе (нажав на иконку). Почему бы не использовать (тадам!) zenity :
#!/bin/bash
if zenity --question --text "Shutdown in 3 hours?" ; then
zenity --info --text "Shutdown has been scheduled"
sudo shutdown -h 180
else
zenity --info --text "Shutdown CANCELLED"
fi