Programa de área de trabalho simples fecha instantaneamente

0

Eu escrevi um programa simples de .desktop com script de acompanhamento. Funcionou recentemente, mas parece ter parado sem motivo. Agora, apenas abre um terminal (esperado), mas em vez de executar o resto do programa, ele instantaneamente fecha a janela. Basicamente, ele abre e fecha instantaneamente a janela do terminal sem executar (ou ao menos parece) qualquer script.

Aqui está o código para ambos, o script primeiro e, em seguida, o arquivo .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 

aqui está o arquivo da área de trabalho:

    [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

Como isso parou de funcionar?!

(Além disso, se você não tivesse notado, eu quero um script simples para desligar o computador depois de um certo tempo. Esta é apenas a segunda coisa que eu escrevi por isso, se tem erros ou você tem uma crítica construtiva, por todos significa!)

Obrigado uma tonelada!

EDITAR:

Eu adicionei uma "saída" simples; para o script. Poderia ter sido tudo isso?

mudança:

    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]"
    
por user174000 10.07.2013 / 09:20

1 resposta

0

Sempre tente um script executando-o a partir de uma linha de comando. Se você fez isso, você veria a seguinte mensagem

:~$ ./test.sh
./test.sh: line 20: syntax error near unexpected token ')'
./test.sh: line 20: '        *) echo "Please enter either C or Press [ENTER]"'

Se você procurar o manual bash, verá a seguinte sintaxe:

case word in [ [(] pattern [ | pattern ] ... ) list ;; ] ... esac

Isso significa que, após os comandos a serem executados, você precisa adicionar um ;; (não necessariamente após uma declaração exit !) A instrução case a seguir também funciona:

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

OK, mas esta é uma resposta chata. Você sabe o que - você quer um programa interativo. Você o lança em uma GUI (clicando em um ícone). Por que não usar (tadam!) 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
    
por January 10.07.2013 / 09:44