桌面文件无法在终端中运行脚本

桌面文件无法在终端中运行脚本

我想在我的 lxpanel 上制作一个按钮来启动一个Hello World!在弹出的 lxterminal 中打印出来的程序,因此我使用了之前在 Debian 7 中成功实现的技术,即:

  1. gedit /bin/hello.sh(以下内容):

    #!/bin/bash
    echo 'Hello World!';
    
  2. gedit /usr/share/applications/hello1.desktop(以下):

    [Desktop Entry]
    Version=1.0
    Type=Application
    Name=Hello1
    Comment=Test the terminal running a command inside it
    Exec=lxterminal -e "/bin/hello.sh"
    StartupNotify=true
    Icon=utilities-terminal
    Terminal=true
    Categories=Utility;
    
  3. 最后我chownchmod上述两个文件如下:

    -rwxr-xr-x 1 a adm 230  1月  1 13:02 /usr/share/applications/hello1.desktop*
    -rwxr-xr-x 1 a adm 240  1月  1 12:57 /usr/share/applications/hello1.desktop~*
    -rwxr-xr-x 1 a adm 194  1月  1 12:04 /usr/share/applications/hello.desktop*
    -rwxr-xr-x 1 a adm 195  1月  1 12:03 /usr/share/applications/hello.desktop~*
    -rwxrwxr-x 1 a adm  87  1月  1 12:35 /usr/share/applications//bin/hello.sh*
    -rwxrwxr-x 1 a a    87  1月  1    12:25 /usr/share/applications//bin/hello.sh~*
    -rwxrwxr-x 1 a adm 134 12月 13 09:56 /usr/share/applications//bin/hello_world.sh*
    

不幸的是无论我做什么,该hello1.desktop文件只能打开一个空白的终端,并且没有任何输出。

我正在运行 Lubuntu 14.04,并按照以下教程将桌面文件链接到 *.sh 脚本程序:

我还做了以下改动hello1.desktop

  • 第 10 行(最后一行)——我也尝试过不使用分号。
  • 第 9 行(“终端”行)- 尝试“false”
  • 第 6 行(“Exec”行)- 尝试了这些:

    Exec=sh /bin/hello.sh;
    Exec=lxterminal -e “/bin/hello.sh”
    Exec=/bin/hello.sh
    Exec=sh -c /bin/hello.sh
    Exec=lxterminal -x sh -c 'echo hello'
    Exec=sh -c 'gnome-terminal echo hello'
    Exec=sh -c 'echo hello'
    Exec=sh /bin/hello.sh
    Exec=sh -c /bin/hello.sh
    

但最终一切都是一样的(Terminal=false显然,第 9 行除外,因为没有终端)。

我可以hello1在系统 -> 附件下看到,但当我单击它时,仍然会弹出一个空白屏幕。在 debian 7.5 LXDE wheezy 中,这确实很容易成功完成,但 Lubuntu 14.04 中出了什么问题,让它变得更加困难?

安德鲁

答案1

我已设法复制您的问题并找到了解决方案。

正如您的研究表明的那样,您最初的问题是:

Terminal=true

和...一起:

Exec=lxterminal -e /bin/hello.sh

唯一的问题是,当您使用:

Terminal=false

执行脚本后,终端会关闭,但实际上它确实运行了脚本。由于脚本产生的输出很少,因此人眼无法看到这种情况,因此看起来像是“弹出空白屏幕”。

据我所知(来自man lxterminal和来自 Google),没有特定的方法可以要求 lxterminal 在执行脚本后保持打开状态,因此您必须更改 bash 脚本(即您的 hello.sh)本身。

例如,您可以将以下任一项添加到脚本末尾。

  1. echo "Press [ENTER] to exit" && read

    • 终端将等待用户点击Enter。 (实际上是输入任何内容后跟Enter。)
  2. /bin/bash

    • 该航站楼将保持开放。

有关执行命令后阻止 shell 关闭的常见问题的讨论,包括有关其他终端仿真器的信息,请参见:如何在不关闭终端的情况下运行脚本?

顺便说一下,桌面文件末尾的分号没有任何作用,所以您最好将其删除。

概括:您需要对原始桌面文件进行的唯一更改是Terminal=false,但如果您想查看脚本是否已运行,则需要在 bash 脚本末尾添加一行。

相关内容