简单的桌面程序立即关闭

简单的桌面程序立即关闭

我编写了一个简单的 .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

它怎么停止工作了?!

(此外,如果您还没有注意到,我想要一个简单的脚本来在一定时间后关闭计算机。这只是我写的第二篇文章,所以如果它有错误或者您有建设性的批评,请务必!)

万分感谢!

编辑:

我在脚本中添加了一个简单的“exit;;”。难道这就是全部吗?

改变:

    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]"

答案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

好的,但这个答案很无聊。你知道吗——你想要一个交互式程序。你可以在 GUI 中启动它(通过单击图标)。为什么不使用(太酷了!)禅意

#!/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

相关内容