他のコマンドを使用するbashスクリプトでは、$?
を使用して前記コマンドのリターンコードを取得できることを理解しています。この方法では一般的にコマンドが0
に成功したかどうかを知ることができますが、!0
には失敗しましたが、コマンドには2つの終了コード1
と0
しかない場合の詳細が表示されません。バイナリリターンコードを持つコマンドのエラー処理を動的に処理する
:
私は、Linuxでreposync
コマンドを使用していた場合、私はそれが失敗した場合には、成功するコマンドを持っていると0
を返すことが原因切断されたネットワークにそれが戻ってstdout
にもかかわらず、1
を返します。以上のエラー:パッケージが削除された場合
[<reponame>: <repo_number> of <total_repos> ] Downloading <package>
Could not retrieve package <package> Error was failure: getPackage/<package>: [Errno 256] No more mirrors to try.
同様に、それはまた、(--gpgcheck
フラグが使用されたと仮定して)失敗GPG署名検証に1
を返します。
私の質問はbashスクリプトから、バイナリ終了コードのコマンドでエラー処理をどのように行うべきですか?
最初は私の考えは、それに応じて、エラーメッセージを処理するために、文字列にエラー出力をリダイレクトするために、次のようになります。
ERRORS=$(reposync 2>&1)
は残念ながら、これは単にメッセージキャプチャし、私は任意の追加のエラー処理動作を行うことを許可するdoesntの報告のほかに。このエラーメッセージをグレープすることは本当にこのシナリオを処理する最もクリーンな方法でしょうか?あなたがパターンを使用できるようになる(bashを参照)
case "$ERRORS" in
*<string>*)
# Code for error that contains <string>
;;
*<string2>*)
# Code for error that contains <string2>
;;
*)
# None matched
;;
esac
case
命令: