如何查看从 .desktop 自定义应用程序启动器启动的脚本的终端输出

如何查看从 .desktop 自定义应用程序启动器启动的脚本的终端输出

我创建了一个ls.sh具有以下主体的基本脚本:

#!/bin/bash -x
ls

并且我确定允许执行权限chmod +x ls.sh。我ls.sh在终端中测试了它,它运行良好。我继续创建了一个ls.desktop条目~/.local/share/applications/,其主体如下:

[Desktop Entry]
Encoding=UTF-8
Name=ls.sh
Exec=ls.sh
Terminal=true
Type=Application
Categories=Programming;

然后我按下键盘上的Super键,开始输入,从我的 Ubuntu GNOME 默认启动器中选择它,什么也没发生。我的终端上ls.sh没有任何输出。ls如何将输出打印到我的终端?或者是新推出的终端?

让我补充一下,我继续用whiptail创建了另一个脚本和桌面条目,当我按下Super键、开始输入ls-whiptail.sh并从我的Ubuntu GNOME默认启动器中选择它时,whiptail确实会启动。所以看起来我做的一切都“正确”。我只需要确定如何在通过GNOME .desktop应用程序启动器初始化时查看脚本的终端输出。

ls-whiptail.sh

#!/bin/bash -x
if whiptail --yesno "Are you sure you want to run this 'ls' command?" 10 40; then
    ls
else
    whiptail --msgbox "You did not run the 'ls' command." 10 40
fi

ls-whiptail.sh 桌面入口

[Desktop Entry]
Encoding=UTF-8
Name=ls-whiptail.sh
Exec=ls-whiptail.sh
Terminal=true
Type=Application
Categories=Programming;

答案1

假设您知道,ls正如您所说,这是一个无用的例子,因为它总是会列出您的主目录下的文件,除非您为它指定一个参数或为终端指定一个工作目录......并且您知道这Exec=ls.sh不是最佳的,你最好使用类似Exec=/full/path/to/ls.sh...的东西也不是ls.desktop在这一点下讨论你的文件,而是你的脚本文件ls.sh

使用时ls,会发生的情况是终端打开并且您的脚本在shell中运行,然后您的脚本结束,shell终止并且终端关闭...因此任何终端输出都消失了...whiptail另一方面,它一直等待用户输入,因此您的脚本还没有结束,从而持有正在运行的shell,而shell又持有它正在运行的终端。

如果您想查看输出,请按住终端1一段时间,例如sleep在脚本末尾添加一个调用,如下所示:

#!/bin/bash
ls
sleep 10

...或者按住它直到按下Enter,让它等待用户输入,如下所示:

#!/bin/bash
ls
read

...或者通过将正在运行的 shell 替换为另一个可以在之后实际使用的交互式 shell 来保持它,如下所示:

#!/bin/bash
ls
exec /bin/bash

...或者用其他任何方式保存它,比如启动一个包含命令输出的 GUI 窗口,如下所示:

#!/bin/bash
ls | /bin/zenity --text-info

... ETC。


1你实际上并没有持有终端,但其中最后运行的 shell 是......并且除非你在脚本中使用 eggnome-terminal或类似命令明确运行终端,否则脚本的输出“应该”(一般来说)即使来自多个 shell 和/或子 shell 也要保留

相关内容