サービスを解除するときにエラーをキャッチする必要があります。応答はnull
のような文字列エラーメッセージです。
error services-migration/foobar: Not found: services-migration/foobar
またはすべてが正常な場合は有効なJSON。 jq
を使用して、指定された文字列が有効なJSONであるかどうかを簡単に確認する方法があるかどうか疑問に思っていました。 error
f.e.のようないくつかのキーワードの文字列を確認することもできますが、より堅牢なオプションを探しています。 true/false
または 1/0
jqから。私はjq
のドキュメントと、ここでSOについてのいくつかの質問を調べましたが、すべてはJSONからKey-Valueを見つけて取り出すことについてでしたが、文字列。
更新:
私はこれを持っています:
result=$(some command)
結果は文字列error services-migration/foobar: Not found: services-migration/foobar
そして、ifステートメント:
if jq -e . >/dev/null 2>&1 <<<"$result"; then
echo "it catches it"
else
echo "it doesn't catch it"
fi
そして、それは常にelse
句になります。
マニュアルから:
-e/--exit-status:
最後の出力値がfalseまたはnullのいずれでもなかった場合はjqの終了ステータスを0に設定し、最後の出力値がfalseまたはnullの場合は1、有効な結果が生成されなかった場合は4に設定します。通常、jqは、使用上の問題またはシステムエラーが発生した場合は2、jqプログラムのコンパイルエラーが発生した場合は3、jqプログラムが実行された場合は0で終了します。
以下を使用できます。
if jq -e . >/dev/null 2>&1 <<<"$json_string"; then
echo "Parsed JSON successfully and got something other than false/null"
else
echo "Failed to parse JSON, or got false/null"
fi
実際、異なる種類のエラーを区別する必要がない場合は、-e
スイッチ。この場合、有効なJSON(false/nullを含む)と見なされるものはすべて、フィルター.
とプログラムは正常に終了するので、if
ブランチに従います。
これは私のために働いています
echo $json_string | ./jq -e . >/dev/null 2>&1 | echo ${PIPESTATUS[1]}
戻りコードを返します:
その後、さらにコードでリターンコードを評価できます。