GNU/Linux >> Belajar Linux >  >> Linux

Variabel Curl Outfile Tidak Bekerja Dalam Skrip Bash?

Mencoba mempersingkat skrip bash yang menggunakan curl untuk mengambil beberapa panggilan API membutuhkan sesuatu seperti ini:

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'

Dan gunakan dalam bentuk ini:

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

Masalahnya adalah curl mengambil foo, bar dan baz tetapi tidak menetapkan output ke foo.json, bar.json dan baz.json. Ini benar-benar membuat #1.json dan menyalurkan output ke stdout. Telah dicoba dengan tunggal, ganda, dan tanpa tanda kutip, semua hasil yang sama.
Ini dijalankan di dalam skrip bash, meskipun perintah curl berperilaku dengan cara yang sama ketika dimasukkan langsung pada baris perintah. Apakah ini masalah sintaks OS X?

Jawaban yang Diterima:

Masalah Anda adalah bahwa {...} ekspresinya juga sintaks shell yang valid. Misalnya, jalankan:

echo file/{one,two}

Dan Anda mendapatkan:

file/one file/two

Jadi ketika Anda menjalankan:

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

{foo,bar,baz} sedang ditafsirkan oleh shell your Anda , dan curl benar-benar menerima baris perintah:

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

Sejak curl tidak melihat {...} ekspresi, Anda tidak mendapatkan
penanganan ajaib untuk #1 . Solusinya cukup dengan melampirkan URL
dalam tanda kutip tunggal:

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

Tanda kutip tunggal menghambat ekspansi shell dari string.


Linux
  1. Skrip bash(I)

  2. Bash Echo Baris Perintah Dieksekusi Di Baris Perintah Itu Sendiri (bukan Dalam Script)?

  3. Tidak Dapat Memahami Script Ini. Bas?

  1. Cpu Gratis, Namun Bash Script Tidak Menggunakan Semua Sumber Daya CPU?

  2. Counter increment di Bash loop tidak berfungsi

  3. atom buat file jika tidak ada dari skrip bash

  1. Variabel lingkungan TERM tidak disetel

  2. Jalankan perintah bash pada pipa jenkins

  3. Perintah Conda bekerja di command prompt tetapi tidak di skrip bash