シェルスクリプトのカール --data-binary $ '

シェルスクリプトのカール --data-binary $ '

私はシェルスクリプトからカールを取得するためにすべてを試しました。この巻き毛に

--data-binary $'

部品を再生成するためのスクリプトを取得できません。奇妙な理由で、$を一重引用符で囲みます。それを修正する方法についてのアイデアはありますか?

--data-binary '$
curl -s  -H 'Connection: keep-alive' \
  -H 'Cache-Control: max-age=0' \
  -H 'Upgrade-Insecure-Requests: 1' \
  -H 'Origin: https://url.com' \
  -H 'Content-Type: multipart/form-data; boundary=----WebKitFormBoundary6AiBMw0TyIybreRa' \
  -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36' \
  -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9' \
  -H 'Sec-Fetch-Site: same-origin' \
  -H 'Sec-Fetch-Mode: navigate' \
  -H 'Sec-Fetch-User: ?1' \
  -H 'Sec-Fetch-Dest: document' \
  -H 'Referer: https://url.com' \
  -H 'Accept-Language: en-US,en;q=0.9,es;q=0.8' \
  -H "Cookie: JSESSIONID=$jsession; __utmc=35664418; __utmz=35664418.1593348512.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); BALANCEID=balancer.apphpgal01; acceta_default=im10snhiask7qic85vrr1dr4i2; __utma=35664418.1302973562.1593348512.1593372701.1593378049.6; __utmt=1; __utmb=35664418.5.10.1593378049" \
  --data-binary $"------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name=\"$var1\"\r\n\r"$var2"\r\n------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name=\"$var3\"\r\n\r\n\r\n------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name=\"g-recaptcha-response\"\r\n\r\n$recaptcha\r\n------WebKitFormBoundary6AiBMw0TyIybreRa--\r\n" \
  --compressed "https://url.com"

これが私を狂わせます。私はすべてを試しました。 $をエスケープして一重引用符で囲みます。二重引用符。すべての「を」に変更してください。

編集する:私が明確に説明できなかったと指摘された方がいます。正解:私は "bashcurl.sh"のようなスクリプトを実行しています。 curl.shの内容は次のとおりです。

curl -s -H "Cookie: JSESSIONID=$jsession" \
  --data-binary $"------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name=\"$var1\"\r\n\r"$var2"\r\n------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name=\"g-recaptcha-response\"\r\n\r\n$recaptcha\r\n------WebKitFormBoundary6AiBMw0TyIybreRa--\r\n" \
  --compressed "https://url.com"

しかし、実行すると、--data-binary部分は引用符の中にドル記号$を入れます。

また、@Stéphane Chazelasが提案したようにこれを試しましたが、成功しませんでした。

--data-binary \$'------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name="'"$var1"'"\r\n\r'"$var2"'\r\n------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name="'"$var3"'"\r\n\r\n\r\n------WebKitFormBoundary6AiBMw0TyIybreRa\r\nContent-Disposition: form-data; name="g-recaptcha-response"\r\n\r\n'"$recaptcha"'\r\n------WebKitFormBoundary6AiBMw0TyIybreRa--\r\n' \
  --compressed "https://url.com"

実行できます

--data-binary '$------WebKitFormBoundary

同じことが起こりました。

--data-binary "$"'------WebKitFormBoundary

また

--data-binary '$''------WebKitFormBoundary

ベストアンサー1

ksh93$"..."引用演算子(にもありますbash)は国際化されたメッセージに使用されますが、これは望むものではありません。

拡張には(ksh93でも可能ですが、より広くサポートされています)が\r\n必要です。$'...'

ただし、パラメーターは拡張されないため、以下が必要です。

--data-binary $'....\r\n...name="'"$var1"$'"...\r\n...'

(ここで--data-binary、​​....<CR><LF>...name="<contents-of-var1>"...<CR><LF>...<CR><LF><contents-of-var1>入力する制御文字、改行また〜として知られています新しいチーム$var1引数に渡す制御文字と変数の内容curl

つまり、シーケンス拡張が必要な​​部分$'...'と変数拡張が必要な​​部分についてです。\x"..."

別のオプションは、以下を定義することです。

CR=$'\r' LF=$'\n' CRLF=$'\r\n'

または標準sh構文を使用します。

eval "$(printf 'CR="\r" LF="\n" CRLF="\r\n"')"

そして"..."すべてに標準を使用してください。

--data-binary "...${CRLF}...name=\"$var1\"..."

バラより通常の文字のように特殊文字を使用する方法は?さまざまなシェルのさまざまな引用演算子に関する詳細情報。

おすすめ記事