无法停止 Shell 脚本中的同时步骤执行 - xfce4-terminal 命令

无法停止 Shell 脚本中的同时步骤执行 - xfce4-terminal 命令
#!/bin/sh
xfce4-terminal
zenity --info
exit

当脚本运行(通过键盘快捷键)时,我的 Xfce4 桌面上的预期行为是终端出现窗口。只有当我关闭相同时才应该禅尼蒂然后出现窗口。

通常情况下,这正是发生的情况。但是,如果我首先打开 Xfce4终端桌面上的窗口,然后命令主题脚本(再次通过键盘快捷键),另一个终端窗口出现(如预期),但是同时,禅尼蒂窗户。这是不受欢迎的行为。

我尝试了很多方法,包括wait命令和在行terminal后附加&&.没有什么对我有用。

是什么原因导致这种情况发生以及我该如何补救?

答案1

尝试一下,我测试过,看起来不错。

xfce4-terminal -x bash -c 'trap "zenity --info" EXIT; bash'

执行时,它会打开一个新的 xfce4-terminal,并执行以下命令。这个命令是一个shell trap。这意味着当同一进程(新打开的终端)收到 EXIT 信号时,将执行引用的命令。最后bash是设置陷阱后给出提示,就像这样邮政。我也尝试过-H,但没有达到预期效果。

答案2

https://bugzilla.xfce.org/show_bug.cgi?id=14544
这是10年前的事https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=434863

建议:xfce4-terminal --disable-server -e "command args ..."

而且似乎没有我发现的副作用。

没有 -e 选项它也可以工作。我自己的用法和旧错误报告中的用法需要 -e 所以他们只谈论“它对 -e 的影响”,但 OPs 用法不涉及 -e,并且该选项也会导致一个普通的新终端本身要阻止,而不仅仅是 -e 指定的命令。

显然,发生的情况(没有标志)是它不直接生成终端,它只是充当客户端,向服务器提交请求以使服务器生成终端。它会立即退出,因为它所做的只是发送一条小消息,而实际的终端是其他地方发生的其他不相关的进程。

服务器和客户端是相同的二进制文件,只是如果尚未运行服务器,则启动并使用其中一个,并且只要有任何打开的终端窗口就存在。

但在所有情况下,无论是否第一次调用,启动进程都会立即退出。

如果它没有破坏与所有其他想要使用终端应用程序的程序的所有期望和互操作性,那么这不一定是一个糟糕的方案。

较旧的错误报告是关于一个应用程序,该应用程序期望能够创建临时文件,在终端中启动文本编辑器来编辑该临时文件,阻止直到终端退出,然后拾取临时文件并在之后对其执行某些操作用户已对其进行编辑。这对世界上的其他一切都有效,但与 xfce4-terminal 不同,但 xfce4 开发人员只说用户错了十几次。

--disable-server 选项似乎解决了这个问题,但即使在那里,他们似乎也试图不遗余力地避免以任何有用的方式说出它实际上做了什么。当用户遇到此问题时,该选项已经存在,并且描述丝毫没有表明这是获得他们所需行为的方式。

xfce4-terminal --help 仅显示该选项存在,而不显示它的作用。
“man xfce4-terminal”只说(直到今天):

--disable-server
           Do not register with the D-BUS session message bus

什么?

相关内容