GNU/Linux >> Tutoriales Linux >  >> Linux

¿La variable Curl Outfile no funciona en Bash Script?

Intentar acortar una secuencia de comandos bash que usa curl para obtener múltiples llamadas API requiere algo como esto:

curl --user $USER:$PASS https://api.example.com/foo -o 'foo.json'
curl --user $USER:$PASS https://api.example.com/bar -o 'bar.json'
curl --user $USER:$PASS https://api.example.com/baz -o 'baz.json'

Y úsalo de esta forma:

curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'

El problema es que curl obtiene foo, bar y baz pero no asigna la salida a foo.json, bar.json y baz.json. Literalmente está creando #1.json y canalizando la salida a la salida estándar. Se probó con comillas simples, dobles y sin comillas, todo con el mismo resultado.
Esto se está ejecutando dentro de un script bash, aunque el comando curl se comporta de la misma manera cuando se ingresa directamente en la línea de comando. ¿Se trata de un problema de sintaxis de OS X?

Respuesta aceptada:

Su problema es que el {...} expresión es también sintaxis de shell válida. Por ejemplo, ejecute:

echo file/{one,two}

Y obtienes:

file/one file/two

Así que cuando ejecutas:

curl --user $USER:$PASS https://api.example.com/{foo,bar,baz} -o '#1.json'

El {foo,bar,baz} está siendo interpretado por su shell y curl en realidad recibe la línea de comando:

  curl --user youruser:secret https://api.example.com/foo https://api.example.com/bar https://api.example.com/baz -o '#1.json'

Desde curl no ve el {...} expresión, no obtienes el
manejo mágico para #1 . La solución es simplemente encerrar la URL
entre comillas simples:

curl --user $USER:$PASS 'https://api.example.com/{foo,bar,baz}' -o '#1.json'

Las comillas simples inhiben cualquier expansión de shell de la cadena.


Linux
  1. Bash Echo ¿La línea de comando se ejecutó en la propia línea de comando (no en un script)?

  2. No puedo entender este guión. golpe?

  3. ¿La CPU es gratuita, pero el script Bash no utiliza todos los recursos de la CPU?

  4. Bash Script - Ejemplo de Hola mundo

  5. El script Bash imprime Command Not Found en líneas vacías

Variable de exportación de bash

35 ejemplos de secuencias de comandos Bash

Bash secuencias de comandos (I)

Cómo ejecutar un script Bash

La coincidencia de patrones no funciona en el script bash

echo el carácter de nueva línea no funciona en bash