2

我正在尝试编写一个脚本来在他们自己的 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,当它运行时返回 0。

谁能解释为什么把这个命令放在里面会[[ ! `…` ]]破坏while测试以及我如何while正确地重写这个循环?

(在拱门上运行)

4

1 回答 1

3

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

while [[ ! '' ]] ...

这将永远运行while身体。

你应该做的是:

while ! xset q > /dev/null 2>&1 
do 
  ...
done
于 2012-09-29T10:11:29.447 回答