我正在嘗試編寫腳本在自己的x會話中啓動xfce和xbmc。爲什麼重定向輸出會影響bash中的測試結果?
爲此,我設置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
循環?
(拱上運行)
bash的重定向'&> file'等同於'>文件2>&1' –
@glenn bash的重定向'&>'也可以說不是POSIX並且'cmd&> file'應該異步運行'cmd',然後截斷'file'(例如,它相當於'cmd&:>文件;')。一些shell會這樣對待它,並且最好避免它。 –