GNU/Linux >> Tutoriales Linux >  >> Linux

Uso de variables de entorno en el comando cURL - Unix

Para citar menos, lea desde la entrada estándar.

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

-d @foo lee de un archivo llamado foo . Si usa - como nombre de archivo, se lee desde la entrada estándar. Aquí, la entrada estándar se proporciona desde un documento aquí, que se trata como una cadena entre comillas dobles sin encerrarla realmente entre comillas dobles.


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

Aquí la variable se coloca fuera de "'" comillas y se expandirá por shell (al igual que en echo $USERNAME ). Por ejemplo, suponiendo que USRNAME=xxx y PASSWORD=yyy la cadena argv[7] pasada a curl es {"username":"xxx","password":"yyy"}

Y sí, esto no funcionará cuando $USERNAME o $PASSWORD contengan espacios.


Las comillas simples inhiben la sustitución de variables, así que use comillas dobles. Las comillas dobles internas deben escaparse.

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

Dado que esta respuesta se escribió en 2015, ha quedado claro que esta técnica es insuficiente para crear correctamente 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

El problema de cotización es claro. Las soluciones (shell) no son

Práctica recomendada actual:utilice una herramienta específica de JSON para crear JSON:

  • jq

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

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

Y con rizo:

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. Ejemplos de comandos de exportación de Linux (cómo establecer variables de entorno)

  2. Mostrar caracteres especiales en Unix mientras usa el comando 'menos'

  3. Descarga paralela usando la utilidad de línea de comando Curl

  4. Cómo mantener las variables de entorno al usar sudo

  5. Uso del certificado de cliente en el comando Curl

Usando el comando Watch en Linux

Comando mkdir en Linux/Unix

Comando Grep en Linux/UNIX

Comando ls en Linux/UNIX

comando cp en Linux/UNIX

Variables de entorno de Linux