我正在尝试编写一个脚本来在它们自己的 x 会话中启动 xfce 和 xbmc。

为此,我设置 DISPLAY 值,在后台运行第一个并等待,直到我从 xset q. 。然后我改变 DISPLAY 并对另一个做同样的事情。

我正在一点一点地写这篇文章,以检查每个部分的语法是否正确,而我坚持的部分是“等待,直到我从 xset q.

export DISPLAY=":0.0"
while [[ ! `xset q` ]]
do
  echo -n "."
done

这段代码似乎可以工作,所以当 XFCE 运行时它会立即退出,当它不运行时它会在那里打印 .xset: unable to open display ":0.0"

但是我不想看到的输出 xset 所以我试图重定向它的输出。

export DISPLAY=":0.0"
while [[ ! `xset q > /dev/null 2>&1` ]]
do
  echo -n "."
done

然而,添加此重定向似乎会破坏检测,并且无论 XFCE 是否正在运行,它都只是在那里打印点。

我已经单独测试了这两个命令,并在它们自己的 shell 脚本中测试了它们,它们都按我的预期工作,当 XFCE 未运行时返回 1,当 XFCE 运行时返回 0。

任何人都可以解释为什么将该命令放入 [[ ! `…` ]] 打破了 while 测试以及我如何重写它 while 循环正确吗?

(在拱门上运行)

有帮助吗?

解决方案

问题是你没有测试返回码 xset 无论如何,你处理它的输出。当您将输出重定向到 /dev/null, ,反引号中的表达式不会返回任何内容,就好像您有:

while [[ ! '' ]] ...

这将始终运行 while 身体。

你应该做的是:

while ! xset q > /dev/null 2>&1 
do 
  ...
done
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top