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 が実行されているかどうかに関係なく、ドットを印刷するだけです。

2 つのコマンドを単独でテストし、シェル スクリプトを単独でテストしたところ、どちらも期待どおりに動作し、XFCE が実行されていない場合は 1 が返され、実行されている場合は 0 が返されます。

そのコマンドをテストの中に入れるとなぜテストが[[ ! `…` ]]中断されるのか、そしてこのループを正しくwhile書き直す方法を誰かが説明できますか?while

(Arch で実行)

4

1 に答える 1

3

問題は、の戻りコードをまったくテストしておらず、そのxset出力を処理していることです。出力をにリダイレクトすると/dev/null、backticksの式は何も返しません。これは、次のようになります。

while [[ ! '' ]] ...

常にwhile体を動かします。

あなたがすべきことは次のとおりです。

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