Простая настольная программа мгновенно закрывается

Я написал простую программу .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]"
0
задан 10 July 2013 в 11:34

1 ответ

Всегда пробуйте скрипт, запуская его из командной строки. Если вы это сделаете, вы увидите следующее сообщение

:~$ ./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
0
ответ дан 10 July 2013 в 11:34

Другие вопросы по тегам:

Похожие вопросы: