如何通过阻止呼叫启动新的 gnome 终端?

How to start new gnome-terminal with blocking call?

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

gnome-terminal -e 'nano test.txt'

打开一个新终端 window,"test.txt" 在 nano 中打开,但调用脚本不会被阻止。有没有办法等待新终端退出,然后再继续原来的脚本?

例如,您可以使用 &&(另请参阅 What is the purpose of "&&" in a shell command?):

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

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

gnome-terminal --disable-factory ...

为了 reader 的利益:@Feiteira 的答案曾经是正确答案,但 gnome-terminal 不再支持。选项 --disable-factory got removed 来自 gnome-terminal.

在这里解释几个人的不同观察:

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

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

我的建议是停止使用 gnome-terminal 并改用开箱即用的东西。例如 xfce4-terminal 正式支持成熟终端的所有那些绝对必要的小选项 window:

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

同时 xfce4-terminal 引入了 --hold,它允许您查看命令的输出。可悲的是 --hold 有一个错误(至少在 Ubuntu 16.04 下),这导致它(经常)截断输出(如果命令终止,终端会过早关闭,所以所有仍然缓冲的输出PTY 没有进入 window。如果您对 PTY 不够小心,这是一个众所周知的常见错误。