我创建了一个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 也要保留