我试图编写一个脚本来在自己的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
循环?
(在Arch上运行)
答案 0 :(得分:3)
问题是你根本没有测试xset
的返回代码,而是处理它的输出。当你将输出重定向到/dev/null
时,反引号中的表达式不会返回任何内容,就好像你有:
while [[ ! '' ]] ...
将始终运行while
正文。
你应该做的是:
while ! xset q > /dev/null 2>&1
do
...
done