GNU/Linux >> Linux Esercitazione >  >> Linux

La variabile Curl Outfile non funziona nello script Bash?

Il tentativo di abbreviare uno script bash che utilizza curl per recuperare più chiamate API richiede qualcosa del genere:

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'

E usalo in questo modulo:

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

Il problema è che curl sta recuperando foo, bar e baz ma non assegna l'output a foo.json, bar.json e baz.json. Sta letteralmente creando #1.json e piping l'output su stdout. È stato provato con virgolette singole, doppie e senza virgolette, tutti gli stessi risultati.
Viene eseguito all'interno di uno script bash, sebbene il comando curl si comporti allo stesso modo quando viene immesso direttamente sulla riga di comando. È un problema di sintassi di OS X?

Risposta accettata:

Il tuo problema è che il {...} espressione è anche sintassi della shell valida. Ad esempio, esegui:

echo file/{one,two}

E ottieni:

file/one file/two

Quindi, quando corri:

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

Il {foo,bar,baz} viene interpretato dalla tua shell e curl riceve effettivamente la riga di comando:

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

Dal momento che curl non vede il {...} espressione, non ottieni la
gestione magica per #1 . La soluzione è semplicemente racchiudere l'URL
tra virgolette singole:

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

Le virgolette singole inibiscono qualsiasi espansione della shell della stringa.


Linux
  1. Bash Echo La riga di comando eseguita sulla riga di comando stessa (non in uno script)?

  2. Non riesco a capire questo script. Bash?

  3. Il comando Rm nello script Bash non funziona con la variabile?

  4. La CPU è gratuita, ma lo script Bash non utilizza tutte le risorse della CPU?

  5. Script Bash - Esempio Hello World

Variabile di esportazione Bash

35 Esempi di script Bash

Come eseguire uno script Bash

L'incremento del contatore nel ciclo Bash non funziona

La corrispondenza del modello non funziona nello script bash

echo il carattere di nuova riga non funziona in bash