0

常に実行されるifステートメントがありますが、その理由はわかりません。

コードは次のとおりです。

var=dom1
if(var=$(ssh root@192.168.0.200 /usr/sbin/xm li | grep dom1 | awk '{print $1}')); then

次に、trueの場合に実行されるコード。

問題は、ifステートメントの後のものは、真であるかどうかに関係なく常に実行されることです。

手動で試したため、ifステートメントのコマンドは機能します。

xm liは、実行中のすべての仮想マシンを提供し、残りの部分は、返されるのが仮想マシンの名前だけであることを確認します。dom1が他のマシンで実行されている場合、dom1を返します。dom1が他のマシンで実行されていない場合、何も返されません。

どうしたのかわかりません。助けていただければ幸いです。ありがとうございました。

4

1 に答える 1

3

(シェルでブール値に対応していない)awkの終了ステータスに依存できないため、コマンドで終了すると失敗します。awk代わりに、ブール論理grepと一致させるためにそれ自体を使用してください。元のPOSTでいくつかのサンプル入力とマッチングルールを提供することにより、私はあなたがそれを行うのを手伝います。


awk投稿のように本当に使用したい場合の回避策:

さらに、

var=$(ssh root@192.168.0.200 /usr/sbin/xm li | awk '/dom1/{print $1}')
if [[ $var ]]; then
    # ...
fi

これは、サブコマンドに出力がある場合に機能します。あなたは前にそれをテストするかもしれません。

于 2013-03-25T22:50:39.067 に答える