wget để in lỗi, nhưng không có gì khác


27

Làm thế nào tôi có thể có lỗi in, nhưng không có gì khác?

Trong hành vi mặc định, nó hiển thị một thanh tiến trình và rất nhiều thứ.

Trong phiên bản --no-verbose vẫn in một dòng trên mỗi tệp đã tải xuống, điều này tôi không muốn.

Tùy chọn --quiet làm cho nó hoàn toàn yên tĩnh, ngay cả trong trường hợp có lỗi, nó không in bất cứ thứ gì.

Có một chế độ trong đó nó in lỗi, nhưng không có gì khác?

Câu trả lời:


17

Có những câu trả lời rất hay trong câu hỏi này, hãy chắc chắn kiểm tra chúng, nhưng những gì tôi đã làm là đây:

wget [wget options] 2>&1 | grep -i "failed\|error"

Đây là câu trả lời duy nhất phù hợp với tôi với bash Ubuntu 16.04.
Ligemer

17

Sử dụng curl, không có điểm đoán mọi lỗi sẽ như thế nào.

[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 / - im lặng

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

-S / - lỗi hiển thị

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

Và nếu bạn cần thiết bị xuất chuẩn trên thiết bị xuất chuẩn vì một số lý do.

curl -s -S http://www.google.coccm/  2>&1 1> /dev/null

1
Thật không may, điều này không xử lý các lỗi HTTP điển hình (ví dụ: lỗi 404 được loại bỏ theo cách này), trong khi phương pháp wget hacky thì có.
process91

Downvote: Mặc dù đề xuất của bạn là hợp lý, nhưng nó không trả lời câu hỏi.
Stephan Richter

Thêm -f / - không hiển thị thông báo lỗi nếu máy chủ trả về mã lỗi (ví dụ 404)
Hontvári Levente

Đây có thể là một câu trả lời tuyệt vời nếu, câu hỏi là về curl, hoặc nếu curl có tính năng tương đương với wget. Thật không may, cũng không phải vậy ..
dfc

4

Tôi không thấy một lựa chọn cho điều đó. Bạn có cần biết lỗi là gì không, hoặc chỉ khi nó xảy ra? Nếu bạn chỉ cần biết nếu có lỗi, bạn có thể sử dụng trạng thái thoát.

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

Hoặc có thể:

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

Và bạn có thể thay đổi con mèo thành lệnh grep nếu bạn muốn có được ...


3
Cách đơn giản hơn: wget -o logfile <url> || mèo logfile
kolypto

Cách đơn giản hơn là tồi tệ hơn vì bạn có thể muốn thoát hoặc làm điều gì đó khác với lỗi, ngoài việc hiển thị thông báo lỗi.
Sam Watkins

2

Chuyển hướng đầu ra tiêu chuẩn sang /dev/null, nhưng giữ đầu ra lỗi trong lựa chọn shell của bạn.

Trong bash này sẽ là:

wget [wget options] > /dev/null

Chỉnh sửa: Vì vậy, wgetmisbehaves. Nếu tất cả các lỗi có chứa từ "lỗi" trong đó, bạn có thể chuyển sanggrep

wget [wget options] 2>&1 | grep -i "error"

wget dường như gửi tất cả mọi thứ đến stderr.
Pupeno

Tôi đã thêm một tùy chọn khác bằng cách grepchỉ sử dụng các lỗi đầu ra
Ben S

stderrkhông đi qua đường ống mà không có sự giúp đỡ.
Tạm dừng cho đến khi có thông báo mới.

1
Cuối cùng, tôi đã sử dụng wget [tùy chọn wget] 2> & 1 | grep -i "thất bại \ | lỗi"
Pupeno

1

wgetđầu ra tất cả các thông báo trên stderr, bạn phải sử dụng chuyển hướng trước khi bạn có thể chuyển nó sang grep:

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

Giả định này wgetbắt đầu các dòng lỗi của nó bằng "wget:".


1
OUT=`wget --no-verbose -O /tmp/a http://example.com/ 2>&1` || echo $OUT

công trinh. Nhưng nó luôn cắt ngắn tập tin đầu ra mà bạn có thể muốn hoặc không muốn.

Curl là tốt hơn:

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

Trong trường hợp có lỗi, nó không sửa đổi tệp đầu ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.