GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Curl-Outfile-Variable funktioniert nicht in Bash-Skript?

Der Versuch, ein Bash-Skript zu kürzen, das curl verwendet, um mehrere API-Aufrufe abzurufen, dauert ungefähr so:

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'

Und verwenden Sie es in dieser Form:

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

Das Problem ist, dass curl foo, bar und baz abruft, aber die Ausgabe nicht foo.json, bar.json und baz.json zuweist. Es erstellt buchstäblich #1.json und leitet die Ausgabe an stdout weiter. Wurde mit einfachen, doppelten und keinen Anführungszeichen versucht, alle mit demselben Ergebnis.
Dies wird innerhalb eines Bash-Skripts ausgeführt, obwohl sich der Curl-Befehl genauso verhält, wenn er direkt in die Befehlszeile eingegeben wird. Ist dies ein Syntaxproblem von OS X?

Akzeptierte Antwort:

Ihr Problem ist, dass der {...} Ausdruck ist auch gültige Shell-Syntax. Führen Sie beispielsweise Folgendes aus:

echo file/{one,two}

Und Sie erhalten:

file/one file/two

Also, wenn Sie laufen:

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

Der {foo,bar,baz} wird von Ihrer Shell interpretiert , und curl tatsächlich erhält die Befehlszeile:

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

Seit curl sieht den {...} nicht Ausdruck erhalten Sie nicht die
magische Handhabung für #1 . Die Lösung besteht darin, die URL
einfach in einfache Anführungszeichen zu setzen:

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

Die einfachen Anführungszeichen verhindern jegliche Shell-Erweiterung des Strings.


Linux
  1. Kann dieses Skript nicht verstehen. Basch ?

  2. CPU ist kostenlos, aber Bash-Skript nutzt nicht alle CPU-Ressourcen?

  3. Bash-Skript – Beispiel „Hello World“.

  4. Das Bash-Skript gibt „Command Not Found“ in leeren Zeilen aus

  5. Zählererhöhung in Bash-Schleife funktioniert nicht

Bash-Exportvariable

35 Bash-Skriptbeispiele

Bash-Scripting(I)

So führen Sie ein Bash-Skript aus

Verwenden Sie die Bash-Variable innerhalb des SLURM-Sbatch-Skripts

Conda-Befehl funktioniert in der Eingabeaufforderung, aber nicht im Bash-Skript