wget untuk mencetak kesalahan, tetapi tidak sebaliknya

27

Bagaimana saya bisa memiliki kesalahan cetak wget, tetapi tidak ada yang sebaliknya?

Dalam perilaku default, ini menunjukkan bilah kemajuan dan banyak hal.

Dalam versi --no-verbose masih mencetak satu baris per file yang diunduh, ini saya tidak mau.

Opsi --quiet menyebabkannya menjadi benar-benar hening, bahkan jika terjadi kesalahan, ia tidak mencetak apa pun.

Apakah ada mode di mana ia mencetak kesalahan, tetapi tidak ada yang lain?

pupeno
sumber

Jawaban:

17

Ada jawaban yang sangat bagus dalam pertanyaan ini, pastikan untuk memeriksanya, tetapi yang saya lakukan adalah ini:

wget [wget options] 2>&1 | grep -i "failed\|error"
pupeno
sumber
Ini adalah satu-satunya jawaban yang bekerja untuk saya dengan 16,04 ubuntu bash.
Ligemer
17

Gunakan curl, tidak ada gunanya menebak seperti apa setiap kesalahan akan terlihat.

[wizard@laptop ~] curl -s -S http://www.google.coccm/ > /dev/null && echo "TRUE"
curl: (6) Couldn't resolve host 'www.google.coccm'
[wizard@laptop ~]$ curl -s -S http://www.google.com/ > /dev/null && echo "TRUE"
TRUE

-s / - diam

Silent mode. Don’t show progress meter or error messages. Makes Curl mute.

-S / - show-error

When used with -s it makes curl show error message if it fails.

Dan jika Anda perlu stderr di stdout karena beberapa alasan.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null
pengintaian
sumber
1
Sayangnya ini tidak menangani kesalahan HTTP tipikal (mis. 404 kesalahan ditekan seperti ini), sedangkan metode hacky wget tidak.
process91
Downvote: Meskipun saran Anda masuk akal, itu tidak menjawab pertanyaan.
Stephan Richter
Tambah -f / - gagal untuk menampilkan pesan kesalahan jika server mengembalikan kode kesalahan (misalnya 404)
Hontvári Levente
Ini bisa menjadi jawaban yang bagus jika, pertanyaannya adalah tentang curl, atau apakah curl memiliki kesamaan fitur dengan wget. Sayangnya tidak demikian halnya ..
dfc
4

Saya tidak melihat opsi untuk itu. Apakah Anda perlu tahu apa kesalahannya, atau hanya jika itu terjadi? Jika kebetulan Anda hanya perlu tahu jika ada kesalahan, Anda dapat menggunakan status keluar.

if ! wget -o /dev/null www.google.com/flasfsdfsdf; then
    echo 'Oops!'
fi

Atau mungkin:

if ! wget -o logfile www.google.com/flasfsdfsdf; then
    cat logfile
fi

Dan Anda dapat mengubah kucing menjadi perintah grep jika Anda ingin menjadi mewah ...

Kyle Brandt
sumber
3
Cara yang lebih sederhana: wget -o logfile <url> || cat logfile
kolypto
Cara yang lebih sederhana lebih buruk karena Anda mungkin ingin keluar atau melakukan sesuatu yang berbeda pada kesalahan, selain menampilkan pesan kesalahan.
Sam Watkins
2

Arahkan output standar ke /dev/null, tetapi simpan output error sesuai pilihan shell Anda.

Dalam bash ini akan menjadi:

wget [wget options] > /dev/null

Sunting: Begitu wgetberperilaku buruk. Jika semua kesalahan mengandung kata "kesalahan" di dalamnya Anda bisa mengirim kegrep

wget [wget options] 2>&1 | grep -i "error"
Ben S
sumber
wget tampaknya mengirim semuanya ke stderr.
pupeno
Saya menambahkan opsi lain menggunakan grephanya untuk kesalahan output
Ben S
stderrtidak melalui pipa tanpa bantuan.
Dijeda sampai pemberitahuan lebih lanjut.
1
Pada akhirnya saya menggunakan wget [opsi wget] 2> & 1 | grep -i "gagal \ | kesalahan"
pupeno
1

Karena wgetmenampilkan semua pesan aktif stderr, Anda harus menggunakan pengalihan sebelum Anda dapat mengirimnya ke pipa untuk menerima:

wget [options] 2>&1 | grep "^wget:"

Ini mengasumsikan bahwa wgetmemulai garis kesalahannya dengan "wget:".

Dijeda sampai pemberitahuan lebih lanjut.
sumber
1
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

bekerja. Tetapi selalu memotong file output, yang Anda mungkin atau mungkin tidak inginkan.

Keriting lebih baik:

curl --fail --silent --show-error -o /tmp/a http://example.com

Dalam hal terjadi kesalahan, itu tidak mengubah file output.

Hontvári Levente
sumber