出力をリダイレクトするのは、Bashでテストの結果に影響しますか?
-
11-12-2019 - |
質問
自分の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が実行されているかどうかにかかわらず、印刷ドットが存在するだけではありません。
自分で2つのコマンドをテストし、シェルスクリプトで自分のものを自分でテストし、XFCEが実行されていないときに1を返し、0のときは0を返し、0が返されます。
誰にも[[ ! `…` ]]
の中にそのコマンドを入れる理由を説明することができます。
(アーチ上の実行)
解決
問題は、xset
の戻りコードをまったくテストしていないということです。出力を/dev/null
にリダイレクトすると、バックトック内の式は何も返しません。
while [[ ! '' ]] ...
.
これは常にwhile
本体を実行します。
あなたがしているべきものは:
while ! xset q > /dev/null 2>&1
do
...
done
. 所属していません StackOverflow