0

bash スクリプトでいくつかの API 呼び出しを実行しています。この場合、API 呼び出しが成功するとjsonファイルが返され、失敗するstderrと が返されます。stderrをキャプチャして、失敗したときに解析したいと思います。SOに関する多くの回答を確認した後、これまでのところ、うまくいく組み合わせは見つかりませんでした。

たとえば、次のルールを既に追加しているので、実行すると次のようになります。

myCmd=("aws --profile myProfile --region eu-west-1 ec2 authorize-security-group-ingress --group-id sg-999aa999 --protocol tcp --port 80 --cidr 0.0.0.0/0 ")
${myCmd[@]} > myJson.file

#check if success
if [ "$?" -ne "0" ] 
then
   # PARSE STDERR
fi

成功チェックは 255 を返し、stderr は以下を返します。したがって、メッセージを解析して、それが一般的なエラーか重複かを確認したいと思います。

AuthorizeSecurityGroupIngress オペレーションの呼び出し時にクライアント エラー (InvalidPermission.Duplicate) が発生しました: 指定されたルール "peer: 0.0.0.0/0, TCP, from port: 80, to port: 80, ALLOW" already exists

4

2 に答える 2

2
myCmd=("aws --profile myProfile --region eu-west-1 ec2 authorize-security-group-ingress --group-id sg-999aa999 --protocol tcp --port 80 --cidr 0.0.0.0/0 ")

if "${myCmd[@]}" > myJson.file 2> error.file; then
   echo ok
else
    err="$(cat error.file)"
    # do domething with $err
fi
于 2014-12-03T08:38:50.237 に答える
2

これを使って:

message=$(${myCmd[@]} 2>&1 >myJson.file)

2>&1stderrが接続されている場所にリダイレクトしstdoutます。これは、コマンド置換に使用されるパイプです。リダイレクトは左から右に処理されるため、これstdoutはファイルにリダイレクトされる前に発生します。

その後、 でエラー メッセージを解析できます$message

于 2014-12-03T08:40:01.227 に答える