複数のテストを組み合わせたい場合、どのようにbashでテストを否定しますか?bashの論理式を否定する場所
コードが
if ! [ $(pgrep Xvfb) ] || [ ! -v DISPLAY ]; then
echo starting xvfb
mkdir -p /tmp/xvfb
Xvfb :1 -fbdir /tmp/xvfb > /tmp/xvfb_output 2>&1 &
export DISPLAY=:1
fi
であることを調達するために、すでに実行していない場合はXvfbのを開始することになっています。 これまでは、前記変数の存在を確認するために、|| [ ! -v DISPLAY ]
部分が欠けていました。
テストを無効にするには、! [ ... ]
または[ ! ... ]
のいずれかを実行します。両方とも動作するようです。
[ ! ...]
はテストの内側にあるため、より明確になりました(そして少し効率的です)。
AND句として書き換えが発生していませんでした。ありがとうございました。あなたは 'もし! (test ... '行より読みやすくする行? –
@userはい、私は実際に' test expr'式を '[expr]'に一般的に好んでいます。このケースは、特に、シェルスクリプトで条件の終わりを検出する手がかりとして、エンドブラケットが私の経験では決して役に立たないためです。もちろん、それは私の意見です。:-)この表記が好きな場合は、角かっこを使用します。 –
'[$(pgrep Xvfb)]'は間違いです。 '[...]'テストが合格するように、 'pgrep'の出力が空でない有効な文字列になることを期待しています。しかし、それは信頼できるものでも良い考えでもありません。幸いにも(それは正常だから) 'pgrep'は意味のあるリターンコードを持っています。だから、もしあなたが '' pgrep Xvfb&>/dev/null 'のようなものを見つけたことをテストするには;エコー "私たちがXvfbを見つけたときに何かする"; fi'。この場合は 'if! pgrep Xfvb&>/dev/null || [! -v DISPLAY];それから.... fi'。また、 'DISPLAY'が設定されていない場合、Xvfbを複数回実行することに注意しましょう。 –