web-dev-qa-db-ja.com

bashスクリプトの変数を使用したカール

次のスクリプトのcurlコマンドで実際の値を使用すると機能し、結果が返されますが、変数を使用すると正しく機能しません

これは、コマンドでそれらを定義する方法の問題だと思います

amz_t=$(cat Amazon-token.txt )
flx_id=$(cat flex-id.txt )
ses_t=$(cat session-token.txt )

curl -s -H 'Host: flex-capacity-na.Amazon.com' \
  -H 'Cookie: session-token='$ses_t'' \
  -H 'x-amz-access-token: '$amz_t'' \
  -H 'x-flex-instance-id: '$flx_id'' \
  -H 'Accept: */*' \
  -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' \
  -H 'Accept-Language: en-us' \
  --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt

これは、上記のスクリプトで実行しようとしたコマンドで、txtファイルには特定の値しか含まれておらず、ガベージ値は含まれていません。

6
Dan Rox

このようなものを試してください:

amz_t=$(cat Amazon-token.txt)
flx_id=$(cat flex-id.txt)
ses_t=$(cat session-token.txt)

UA='iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141'

URL='https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122'

curl -s -H 'Host: flex-capacity-na.Amazon.com' \
  -H "Cookie: session-token=$ses_t" \
  -H "x-amz-access-token: $amz_t" \
  -H "x-flex-instance-id: $flx_id" \
  -H 'Accept: */*' \
  -H "User-Agent: $UA" \
  -H 'Accept-Language: en-us' \
  --compressed "$URL" >> output.txt

固定文字列(つまり、変数が含まれていない)には一重引用符を使用し、変数の補間を行う必要がある文字列には二重引用符を使用します。

9
cas

変数に単一引用符を使用することはできません。これにより、bashは$特殊文字を解釈しなくなります。代わりに二重引用符を使用できます。 http://tldp.org/LDP/abs/html/quoting.html

[〜#〜]編集[〜#〜]

私は今、すべての単一引用符を前に閉じ、変数の後にそれらを再び開いていることに気づきましたが、変数は引用符で囲まれていないため、おそらく正しく読み取られていません。このコマンドですべてを一重引用符で囲む必要があるかどうかはわかりませんが、必要な場合は、以下のように二重引用符で囲むことができます。

行を変更します。

curl -s -H 'Host: flex-capacity-na.Amazon.com' -H 'Cookie: session-token='$ses_t'' -H 'x-amz-access-token: '$amz_t'' -H 'x-flex-instance-id: '$flx_id'' -H 'Accept: */*' -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' -H 'Accept-Language: en-us' --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt

に:

curl -s -H 'Host: flex-capacity-na.Amazon.com' -H 'Cookie: session-token='"$ses_t" -H 'x-amz-access-token: '"$amz_t" -H 'x-flex-instance-id: '"$flx_id" -H 'Accept: */*' -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' -H 'Accept-Language: en-us' --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt

しかし、これもうまくいくと思います:

curl -s -H 'Host: flex-capacity-na.Amazon.com' -H "Cookie: session-token=$ses_t" -H "x-amz-access-token: $amz_t" -H "x-flex-instance-id: $flx_id" -H 'Accept: */*' -H 'User-Agent: iOS/10.2.2 (iPhone Darwin) Model/iPhone Platform/iPhone6,1 RabbitiOS/2.0.141' -H 'Accept-Language: en-us' --compressed 'https://flex-capacity-na.Amazon.com/GetOffersForProvider?serviceAreaIds=122' >> output.txt
2
jesse_b