私のシェルスクリプトには、サーバーでエラー500応答を発生させるカールコマンドのこの部分があります。ただし、このコードはコマンドを手動で実行すると機能します。
curl -qgsSkH "Content-Type: multipart/form-data" --no-progress-bar --header "Token: $authKey" -F "filename=@$compressedFileName" -F "options={\"application\":\"2\",\"timeout\":\"5000\"}" https://www.domain.com > results.txt
理由を知っている人はいますか?
編集する: 手動でデバッグしようとすると、$authKey変数が問題を引き起こしたことがわかりました。この変数は私のスクリプトの次のコードで取得されます。
# Get authentication key from FireEye AX response
while read line
do
if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
then
authKey="${BASH_REMATCH[1]}"
fi
done <auth.txt
この変数を次のようにオーバーライドすると、スクリプトは機能します。
authKey="TheAuthenticationKey"
しかし、なぜこれが起こるのですか?ファイルを1行ずつ読み取ると、ファイルから渡された文字列の前の部分はすでに正しい値を渡しています。 (出力をtxtファイルにエコーして再確認します。)
編集する もっと深く入ることができました。トークン値をファイルにエコーし、文字列の先頭と末尾に「を追加しようとすると、次の結果が表示されます。
"X-FeApi-Token: IDR+jxU1kB5ZpXsRNAgqfjTxkjZ0L2atH+l0H/NeatWDAJs=
"
新しい行を削除する方法がわかりません。誰でもアドバイスできますか?
ベストアンサー1
この問題は、「FireEye AX」が提供する$authKeyの改行またはキャリッジリターンと改行文字が原因で発生したようです。
パイプを介してキャリッジリターンと改行を削除できます。tr -d '\r\n'
例えば
# Get authentication key from FireEye AX response
while read line
do
if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
then
authKey="${BASH_REMATCH[1]}"
authKey=$(printf "%s" "$authKey" | tr -d '\r\n')
fi
done <auth.txt
$BASH_REMATCHがサブシェルに渡されたかどうか覚えていません...一行で試してみることができます。おそらく動作します。
authKey=$(printf "%s" "${BASH_REMATCH[1]}" | tr -d '\r\n')