我有一个在后台运行的脚本(没有终端窗口或 TTY),偶尔会做一些事情。
我现在希望它在做某事时做另一件事,那就是打开一个 Gnome 终端窗口并执行 2 个命令。实际上,我只需要执行 1 个命令,但我想让终端窗口保持打开状态,以便我可以看到命令的输出。该命令在 stdout 和 stderr 上都打印,并且其输出会随着时间的推移而变化,因此仅将其写入文件并发送某种通知并不能很好地完成这项工作。
我可以让 Gnome 终端打开一个窗口并执行 1 个命令:
gnome-terminal -e "sleep 10"
Run Code Online (Sandbox Code Playgroud)
sleep为简单起见,我选择了长时间运行的命令。但是,添加另一个命令时,不会打开终端窗口:
gnome-terminal -e "echo test; sleep 10"
Run Code Online (Sandbox Code Playgroud)
解决这个问题的方法是什么?
jim*_*mij 29
gnome-terminal 将引号中的所有内容视为一个命令,因此为了连续运行其中的许多命令,您需要启动解释器(通常是一个 shell),并在其中执行一些操作,例如:
gnome-terminal -e 'sh -c "echo test; sleep 10"'
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可能希望即使在命令完成工作后窗口也保持打开状态,在这种情况下,只需启动新的 shell,或者用新的 shell 替换当前的:
gnome-terminal -e 'sh -c "echo test; sleep 10; exec bash"'
Run Code Online (Sandbox Code Playgroud)
Tre*_*vor 18
截至 2020 年 1 月,中的-e选项gnome-terminal仍然有效,但会引发警告
# 选项“-e”已弃用,可能会在更高版本的 gnome-terminal 中删除。
# 使用“--”终止选项并将命令行放在它之后执行。
您可以在没有警告的情况下运行这两个命令
gnome-terminal -- /bin/sh -c 'echo test; sleep 10'
Run Code Online (Sandbox Code Playgroud)
而且,正如在这个答案中提到的,如果你希望窗口之后保持打开状态,你可以这样做
gnome-terminal -- /bin/sh -c 'echo test; sleep 10; exec bash'
Run Code Online (Sandbox Code Playgroud)