カールを使用して実行する必要があるURLがあります。状態が 200 の場合、応答は一時ファイルに書き込まれます。次に、この一時ファイルを他のファイルと比較してみてください("/opt/proc/config/init.txt")
。一時ファイルが異なる場合、init.txt
内容はその一時ファイルに置き換えられます。ただし、ステータスが 200 でない場合は、ゼロ以外のステータスコードで終了し、メッセージが表示されます。
以下は私が得たものです。これを行うより良い効率的な方法はありますか?可能であれば、これらすべてを1行で実行できますか?
URL="some_url"
# store the whole response with the status at the and
response=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -X POST $URL)
# extract the body
new=$(echo $response | sed -e 's/HTTPSTATUS\:.*//g')
# extract the status
status=$(echo $response | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
# print the body
echo "$new"
echo $new > /opt/proc/config/temp.txt
if [ $status -eq 200 ]; then
if ! cmp /opt/proc/config/init.txt /opt/proc/config/temp.txt > /dev/null 2>&1
then
echo different
mv /opt/proc/config/temp.txt /opt/proc/config/init.txt
else
echo same
fi
else
echo "Error [HTTP status: $status]"
rm /opt/proc/config/temp.txt
exit 1
fi
答え1
ファイルを比較するために何を使用するのかわかりませんcmp
。たぶん、各ファイルのmd5またはsha1フィンガープリントを作成し、フィンガープリントを比較することもできます。 2つのファイルが異なるオフセットや行番号などの詳細は気にしないので、両方のファイルがまったく同じかどうかを知りたいのです。それにもかかわらず、ファイルが非常に大きくない場合は、ここでパフォーマンスの問題を心配しません。
なぜ単に使用しないのですか?-o, --output オプションダウンロードしたファイルをディスクに書きますか?
別の方法を使用して応答ヘッダーを解析する代わりに、sed
次のようにします。カール変数つまり、利用可能です%{response_code}
。