GNU/Linux >> Linux の 問題 >  >> Linux

cURL コマンドでの環境変数の使用 - Unix

引用を少なくするには、代わりに標準入力から読み取ります。

curl -k -X POST -H 'Content-Type: application/json' -d @- <<EOF
{ "username": "$USERNAME", "password": "$PASSWORD"}
EOF

-d @foo foo という名前のファイルから読み取ります . - を使用する場合 ファイル名として、標準入力から読み取ります。ここでは、標準入力はヒア ドキュメントから提供されます。ヒア ドキュメントは、実際には二重引用符で囲まれることなく、二重引用符で囲まれた文字列として扱われます。


curl -k -X POST -H 'Content-Type: application/json' -d '{"username":"'$USERNAME'","password":"'$PASSWORD'"}'

ここで、変数は "'" の外側に配置されます 引用符で囲まれ、シェルによって展開されます (echo $USERNAME のように) )。たとえば、 USRNAME=xxx と仮定すると と PASSWORD=yyy curl に渡された argv[7] 文字列 {"username":"xxx","password":"yyy"} です

はい、$USERNAME または $PASSWORD に空白文字が含まれている場合、これは機能しません。


単一引用符は変数の置換を禁止するため、二重引用符を使用してください。内側の二重引用符はエスケープする必要があります。

...  -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"

この回答は 2015 年に書かれて以来、この手法では JSON を適切に作成するには不十分であることが明らかになりました:

$ USERNAME=person1
$ PASSWORD="some \"gnarly 'password"
$ echo "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}"
{"username":"person1","password":"some "gnarly 'password"}
$ echo "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}" | jq .
parse error: Invalid numeric literal at line 1, column 47

引用の問題は明らかです。 (シェル) ソリューションはそうではありません

現在のベスト プラクティス:JSON 固有のツールを使用して JSON を作成する:

  • jq

    $ jq -n -c --arg username "$USERNAME" --arg password "$PASSWORD" '$ARGS.named'
    {"username":"person1","password":"some \"gnarly 'password"}
    
  • じょ

    $ jo "username=$USERNAME" "password=$PASSWORD"
    {"username":"person1","password":"some \"gnarly 'password"}
    

curl の場合:

json=$( jq -n -c --arg username "$USERNAME" --arg password "$PASSWORD" '$ARGS.named' )
# or
json=$( jo "username=$USERNAME" "password=$PASSWORD" )

# then
curl ... -d "$json"

Linux
  1. 再ハッシュを使用して Linux または Unix パス環境変数を更新する

  2. Curl コマンド ライン ユーティリティを使用した並列ダウンロード

  3. sudo の使用時に環境変数を保持する方法

  1. Unixでシェルコマンドを編集するためにViキーを使用しますか?

  2. systemd サービスの ExecStart のコマンド パスで変数を使用する

  3. シェルコマンドを使用してGDB内で環境変数を設定するには?

  1. 「?」を使用したコマンド置換

  2. Tmux.confファイルで環境変数を使用していますか?

  3. Linux エクスポート コマンドの例 (環境変数の設定方法)