Saya mencoba untuk mencetak hanya bagian verbose dari permintaan CURL (yang dikirim ke stderr
) dari bash shell.
Tetapi ketika saya mengarahkan stdout
seperti ini:
curl -v http://somehost/somepage > /dev/null
Beberapa jenis tabel hasil muncul di tengah output ke stderr
:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
Diikuti oleh ini menjelang akhir:
{ [data not shown]
118 592 0 592 0 0 15714 0 --:--:-- --:--:-- --:--:-- 25739
Yang membuat header respons lebih mudah dibaca.
Saya tidak melihat teks ini ketika tidak mengarahkan.
Cara lain untuk melihat efeknya:
Tabel tidak muncul:
curl -v http://somehost/somepage 2>&1
Tabel muncul:
curl -v http://somehost/somepage 2>&1 | cat
1) Kenapa ini muncul hanya dengan jenis pengalihan tertentu?
2) Apa cara paling rapi untuk menekannya?
Terima kasih
-s
kuncinya!-s
tetapi tanpa-v
Anda tidak akan melihat kesalahan seperti kegagalan untuk terhubung. Untuk itu Anda juga harus menambahkan-S
(atau--show-error
) seperti pada jawaban mhoydis.curl
kejq
. Tidak ada progress bar tanpa pipingjq
, maka ketika piping kejq
saya harus kembali dan menambahkan-s
.STDOUT
itu bukan tty. Ketika output tidak sedang disalurkan, Anda tidak ingin informasi kemajuan diselingi dengan output normal, yang dapat Anda lihat dan memiliki beberapa gagasan tentang kemajuan. Ketika output diarahkan atau disalurkan, Anda tidak dapat melihatnya sehingga Anda tidak memiliki pengukur untuk kemajuan - kecuali bilah kemajuan dihidupkan.Ini akan menekan dialog status, tetapi sebaliknya akan menghasilkan kesalahan ke STDERR.
Di atas menampilkan tabel status saat mengarahkan.
Di atas menekan tabel status ketika mengarahkan ulang, tetapi kesalahan masih akan pergi ke STDERR.
Di atas adalah contoh kesalahan untuk STDERR.
Cukup tambahkan 2> & 1 di akhir untuk mengarahkan STDERR ke STDOUT (dalam hal ini, ke file).
sumber
Menurut
man curl
:Contoh penggunaan:
atau jika Anda ingin menangkap HTTP-BODY menjadi variabel di bash
Anda dapat menggunakan
-s
atau--silent
secara bergantian.sumber
Dengan mengacu pada pertanyaan 1 ( bagaimana CURL tahu hanya menampilkan tabel ketika output dialihkan), saya tidak menyadari suatu program dapat mengatakan bahwa outputnya diarahkan, tetapi tampaknya pada sistem POSIX ada fungsi
isatty
yang melaporkan apakah atau tidak deskriptor file merujuk ke terminal.sumber
[[ -p /dev/stdout ]] && echo "stdout is to a pipe"; [[ -t 1 ]] && echo "output to terminal"; [[ ! -t 1 && ! -p /dev/stdout ]] && echo "output redirected"
dari halaman manual curl
curl harus menggunakan isatty untuk menentukan pengalihan dan mencetak pengukur kemajuan ketika diarahkan ke file atau pipa shell.
dari halaman manual curl
sumber
Untuk meletakkan pesan kesalahan nyata di suatu tempat, Anda harus menulis strerr ke file log. Sesuatu seperti itu:
sumber
Berada di belakang proxy saya menggunakan perintah seperti ini.
date -s "$ (curl --proxy http: // PROXY: 8080 -s http://google.com --head -s | grep Date | sed 's / Date: // g')"
sumber