2

私が次のことを行い、ネットワークがダウンしている場合、ゼロケースが実行されますが、これは実行されるべきではありません。

case "$(ssh -n $host zfs list -t snapshot -o name -H | grep "tank/fs" | wc -l | awk '{print $1}')" in
    0)  # do something
        ;;
    1)  # do something else
        ;;
    *)  # fail
esac

スクリプトの前半で、 に SSH で接続できることを確認し$hostましたが、今日、この問題を発見しました。この問題は、確認の直後にネットワークが失敗するというものでした。

SSH コマンドからの戻り値を確認すると、awk最後に実行されたときに常に戻り値を取得します。

質問

zfs失敗した SSH 接続からのゼロ行ではなく、出力されたゼロ行を実際にカウントすることを保証するにはどうすればよいですか?

4

2 に答える 2

0

これはどうですか(sshの後のコマンドはローカルで実行されるべきではありません):

"$(ssh -n $host 'zfs list -t snapshot -o name -H | grep "tank/fs" | wc -l | awk \'{print $1}\')'"

リモート マシンで実行する ssh のコマンドを一重引用符で囲んだことに注意してください。'for awklikeもエスケープしました\'。呼び出しの戻り値を確認し、成功を返した場合にのみ動作します。

于 2013-09-26T11:43:05.107 に答える