私のスクリプトは次のとおりです。 - (編集済み)
httpUrl="http://www.nnin.com"
rep=$(curl -v -X POST -d "UID=username&PWD=pass" $httpUrl)
status=$?
if [ "$?" -eq 0 ]; then
echo "Success"
exit $status
else
echo "Failed"
exit $status
fi
スクリプトを実行すると、戻りコードは常にある$?=0
時点でスクリプトが正常に実行されたが、戻りコードがcURL
次の関数に適用されることを望んでいるためです。
特に、このサイトでさまざまな方法を調べてみましたが、それほど役に立ちませんでした。おそらく、コマンドが原因である可能性があり、スクリプトのPOST
実行中に印刷を防ぐにはどうすればよいですか?
ありがとう
答え1
コマンドの終了ステータスの取得
コマンド出力をrep
変数に代入しても、カールコマンドの終了状態は失われません。$?
詳細についてはをご覧ください。コマンドの戻り値および/または出力を変数にどのように格納できますか?。
失敗した HTTP 要求の Curl 終了コード
通常、要求されたHTTPリソースが利用できない場合、Webサーバーは関連するHTTPステータスコード(404など)に対応するHTML文書で応答します。この場合、カールはサーバーから文書を受け取り、Webサーバーから正常に応答を受けたため、エラー文書を表示し、成功を示すためにステータス0で終了します。
curl
HTTPリソースの取得に問題がある場合は、エラーコードを返したいと思います。スクリプトcurl
がHTTPリソースを取得できない場合は、失敗状態で終了するのが最善です。これを行うには、カールの-f, --fail
マニュアルページに次のようなカールオプションを提供する必要があります。
サーバーエラーが発生すると自動的に失敗します(出力なし)。これは主に、失敗した試みをよりよく処理するためにスクリプトなどをより有効にするために行われます。通常の状況でHTTPサーバーが文書を渡すことができない場合は、状況を説明するHTML文書を返します(通常、理由と追加情報も説明します)。このフラグはカールがこの内容を出力しないようにし、エラー22を返します。
この方法は安全ではなく、特に認証が関連している場合は失敗した応答コード(応答コード401と407)を見逃すことがあります。
追加変数を使用して、カールコマンドの終了ステータスを保存できますstatus
。
httpUrl="http://www.nnin.com"
rep=$(curl -f -v -d "UID=username&PWD=pass" "$httpUrl")
status="$?"
echo "$rep"
exit "$status"
URLにシェルで解釈できる文字が含まれている場合は、シェル変数をhttpUrl
二重引用符で囲む必要があります。また、-X POST
オプションを使用してデータを提供するときは常にPOSTメソッドが使用されるため、これは必要ありません-d
。
(なし) カールコマンドの出力を印刷しません。
rep
カールコマンドの出力を標準出力として印刷することがすべてであれば、変数に保存する必要はありません。
2番目の質問については、「印刷物の防止方法」、オプションをオプション-v/--verbose
に置き換えることができます-s/--silent
(自動モード。進行状況インジケータまたはエラーメッセージは表示されません)。
実際、スクリプトの最後のコマンドがカール呼び出しの場合、スクリプトをさらに簡素化できます。スクリプトの終了コードは、スクリプトの最後のコマンドの戻りコードになります。
httpUrl="http://www.nnin.com"
curl -f -s -d "UID=username&PWD=pass" "$httpUrl"