Jawaban:
tambahkan opsi -s
(diam) untuk menghapus pengukur kemajuan, lalu alihkan stderr ke stdout untuk mendapatkan keluaran verbose pada fd yang sama dengan isi respons
curl -vs google.com 2>&1 | less
2>&1
.
URL Anda mungkin memiliki ampersand di dalamnya. Saya mengalami masalah ini juga, dan saya menyadari bahwa URL saya penuh dengan ampersand (dari variabel CGI yang diteruskan) dan semuanya dikirim ke latar belakang dengan cara yang aneh dan dengan demikian tidak dialihkan dengan benar. Jika Anda memberi tanda kutip di sekitar URL, itu akan memperbaikinya.
Jawaban di atas tidak berhasil untuk saya, yang akhirnya berhasil adalah sintaks ini:
curl https://${URL} &> /dev/stdout | tee -a ${LOG}
tee menempatkan output di layar, tetapi juga menambahkannya ke log saya.
&> /dev/stdout
jelas merupakan bagian yang hilang, terima kasih
Jika Anda membutuhkan output dalam file, Anda dapat menggunakan redirect:
curl https://vi.stackexchange.com/ -vs >curl-output.txt 2>&1
Harap pastikan untuk tidak membalik >curl-output.txt
dan 2>&1
, yang tidak akan berfungsi karena perilaku pengalihan bash .
Saya menemukan hal yang sama: curl dengan sendirinya akan mencetak ke STDOUT, tetapi tidak dapat disalurkan ke program lain.
Pada awalnya, saya pikir saya telah menyelesaikannya dengan menggunakan xargs untuk menggemakan output terlebih dahulu:
curl -s ... <url> | xargs -0 echo | ...
Tapi kemudian, seperti yang ditunjukkan di komentar, ini juga berfungsi tanpa bagian xargs, jadi -s
(mode diam) adalah kunci untuk mencegah keluaran kemajuan asing ke STDOUT:
curl -s ... <url> | perl -ne 'print $1 if /<sometag>([^<]+)/'
Contoh di atas mengambil <sometag>
konten sederhana (tidak mengandung tag yang disematkan) dari output XML dari pernyataan curl.
Hanya 2 sen saya. Perintah di bawah ini harus melakukan trik, seperti yang dijawab sebelumnya
curl -vs google.com 2>&1
Namun jika perlu mendapatkan keluaran ke file,
curl -vs google.com > out.txt 2>&1
harus bekerja.
Contoh sederhana ini menunjukkan cara menangkap keluaran curl, dan menggunakannya dalam skrip bash
function main
{
\curl -vs 'http://google.com' 2>&1
# note: add -o /tmp/ignore.png if you want to ignore binary output, by saving it to a file.
}
# capture output of curl to a variable
OUT=$(main)
# search output for something using grep.
echo
echo "$OUT" | grep 302
echo
echo "$OUT" | grep title
curl -v url 2>&1
, kesalahan diarahkan dengan benar ke output standar untuk saya.