打开 Gnome 终端窗口并执行 2 个命令

打开 Gnome 终端窗口并执行 2 个命令

我有一个在后台运行的脚本(没有终端窗口或 TTY),偶尔会执行某些操作。

我现在希望它在做某事时做另一件事,即打开 Gnome 终端窗口并执行 2 个命令。实际上,我只需要执行 1 个命令,但我想让终端窗口保持打开状态,以便我可以看到命令的输出。该命令在 stdout 和 stderr 上打印,并且其输出随着时间的推移而变化,因此仅将其写入文件并发送某种通知并不能很好地完成这项工作。

我可以让 Gnome 终端打开一个窗口并执行 1 个命令:

gnome-terminal -e "sleep 10"

为简单起见,我选择sleep作为长时间运行的命令。但是,当添加另一个命令时,不会打开终端窗口:

gnome-terminal -e "echo test; sleep 10"

解决这个问题的办法是什么?

答案1

gnome-terminal将引号中的所有内容视为一个命令,因此为了连续运行其中许多命令,您需要启动解释器(通常是一个 shell),并在其中执行一些操作,例如:

gnome-terminal -e 'sh -c "echo test; sleep 10"'

顺便说一句,即使命令完成其工作,您可能也希望窗口保持打开状态,在这种情况下只需启动新的 shell,或用新的 shell 替换当前的 shell:

gnome-terminal -e 'sh -c "echo test; sleep 10; exec bash"'

答案2

截至 2020 年 1 月,该-e选项gnome-terminal仍然有效,但会引发警告

# 选项“-e”已弃用,可能会在更高版本的 gnome-terminal 中删除。

# 使用“--”终止选项并将要执行的命令行放在其后。

您可以运行这两个命令而不发出警告

gnome-terminal -- /bin/sh -c 'echo test; sleep 10'

并且,正如中提到的这个答案,如果您希望窗口之后保持打开状态,您可以这样做

gnome-terminal -- /bin/sh -c 'echo test; sleep 10; exec bash'

*回答类似的问题

答案3

我运气更好,将命令放入外部脚本中,然后从基于 gnome 终端的第二个脚本运行它们

脚本1:命令.sh

#bin/bash
precommand
app
postcommand

然后是一个在 gnome-terminal runscript.sh 中执行这些脚本的脚本:

gnome-terminal --full-screen --hide-menubar -- /bin/sh commands.sh

相关内容