繁体   English   中英

如何使用阻塞调用启动新的gnome终端?

[英]How to start new gnome-terminal with blocking call?

我需要从脚本中打开一个新终端,但是我想等待该终端退出,然后再继续执行其余脚本。 我知道

gnome-terminal -e 'nano test.txt'

打开一个新的终端窗口,并在nano中打开“ test.txt”,但不会阻止调用脚本。 有没有办法在继续原始脚本之前等待新终端退出?

例如,您可以使用&& (另请参见shell命令中“ &&”的目的是什么? ):

gnome-terminal -e 'nano test.txt' && sleep 5 && echo "Done"

为了读者的利益:@Feiteira的答案以前是正确的答案,但gnome-terminal不再支持。 选项--disable-factory 已从 gnome-terminal 删除

在这里解释几个人的不同看法:

如果它是第一个实例,则gnome-terminal仅阻止。 然后,该单个实例充当gnome-terminal将来所有调用的服务器。 然后,这些其他gnome-terminal调用将所有内容移交给该​​服务器,并立即终止。 因此,您可以观察到两种行为:“阻塞”(当它是一个唯一实例时)和“非阻塞”(当另一个实例已经在运行时)。

一个包装器 ,例如Ubuntu 16.04使用的包装器 ,可以模拟该缺少的选项。 但是,该包装器很复杂。 这是通过启动另一个服务器(具有另一个服务名称)来完成的。 对于该服务器,同样的假设成立(您可以将其他gnome-terminal附加到该服务器,然后其他gnome-terminal也可以立即返回)。

我的建议是停止使用gnome-terminal并切换到可以立即使用的功能。 例如,对于成熟的终端窗口, xfce4-terminal正式支持所有那些绝对必要的选项:

xfce4-terminal --disable-server -x nano test.txt

此外, xfce4-terminal引入了--hold ,它使您可以查看命令的输出。 可悲的是--hold有一个错误(至少在Ubuntu 16.04下),这会导致它(经常)截断输出(如果命令终止,则终端关闭得太早了,因此PTY的所有仍缓冲输出不会使它停止运行)。如果您对PTY不够小心,这是一个非常知名的常见错误)。

您想要的选项是:--disable-factory

gnome-terminal --disable-factory ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM