ลองพิมพ์ข้อผิดพลาด แต่ไม่มีอะไรอื่น


27

ฉันจะมีข้อผิดพลาดในการพิมพ์ได้อย่างไร แต่ไม่มีอะไรเป็นอย่างอื่น

ในพฤติกรรมเริ่มต้นจะแสดงแถบความคืบหน้าและสิ่งต่างๆมากมาย

ในรุ่น - ไม่ verbose ยังพิมพ์หนึ่งบรรทัดต่อไฟล์ที่ดาวน์โหลดนี่ฉันไม่ต้องการ

ตัวเลือก - เงียบทำให้เงียบโดยสิ้นเชิงแม้ในกรณีที่มีข้อผิดพลาดก็ไม่ได้พิมพ์อะไรเลย

มีโหมดที่จะพิมพ์ข้อผิดพลาด แต่ไม่มีอะไรอีกหรือไม่?

คำตอบ:


17

มีคำตอบที่ดีมากในคำถามนี้โปรดตรวจสอบพวกเขา แต่สิ่งที่ฉันทำคือ:

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

นี่เป็นคำตอบเดียวที่ใช้ได้กับฉันกับ Ubuntu อูบุนตู 16.04
Ligemer

17

ใช้ curl ไม่ต้องเดาว่าทุกข้อผิดพลาดจะมีลักษณะอย่างไร

[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 / - เงียบ

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

-S / - แสดงข้อผิดพลาด

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

และถ้าคุณต้องการ stderr บน stdout ด้วยเหตุผลบางอย่าง

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

1
น่าเสียดายที่นี่ไม่ได้จัดการกับข้อผิดพลาด HTTP ทั่วไป (เช่นระงับข้อผิดพลาด 404 ด้วยวิธีนี้) ในขณะที่วิธีการแฮ็ก wget ทำ
กระบวนการ 91

Downvote: แม้ว่าข้อเสนอแนะของคุณจะเป็นไปได้ แต่ก็ไม่ตอบคำถาม
Stephan Richter

เพิ่ม -f / - ล้มเหลวในการแสดงข้อความแสดงข้อผิดพลาดหากเซิร์ฟเวอร์ส่งคืนรหัสข้อผิดพลาด (เช่น 404)
Hontvári Levente

นี่อาจเป็นคำตอบที่ดีถ้าคำถามเกี่ยวกับขดหรือถ้าขดมีความเท่าเทียมกันของคุณลักษณะด้วย wget แต่น่าเสียดายที่ไม่เป็นกรณีที่ ..
dfc

4

ฉันไม่เห็นตัวเลือกสำหรับสิ่งนั้น คุณจำเป็นต้องรู้ว่าข้อผิดพลาดคืออะไรหรือแค่เกิดขึ้น? หากคุณเพิ่งรู้ว่ามีข้อผิดพลาดคุณสามารถใช้สถานะออก

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

หรืออาจจะ:

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

และคุณสามารถเปลี่ยน cat เป็นคำสั่ง grep หากคุณต้องการได้รับแฟนซี ...


3
วิธีที่ง่ายกว่านี้: wget -o logfile <url> || cat logfile
kolypto

วิธีที่ง่ายกว่านั้นแย่กว่าเนื่องจากคุณอาจต้องการออกหรือทำสิ่งที่แตกต่างจากข้อผิดพลาดนอกเหนือจากการแสดงข้อความข้อผิดพลาด
Sam Watkins

2

เปลี่ยนทิศทางเอาต์พุตมาตรฐานไปที่/dev/nullแต่เก็บเอาต์พุตข้อผิดพลาดไว้ในเชลล์ที่คุณเลือก

ในทุบตีนี้จะเป็น:

wget [wget options] > /dev/null

แก้ไข:wgetซุกซนดังนั้น หากข้อผิดพลาดทั้งหมดมีคำว่า "ข้อผิดพลาด" อยู่คุณสามารถไปที่grep

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

ดูเหมือนว่าจะส่งทุกอย่างไปให้ stderr
pupeno

ฉันจะเพิ่มตัวเลือกอื่นโดยใช้grepข้อผิดพลาดของการส่งออกเพียงอย่างเดียว
เบน S

stderrไม่ผ่านท่อโดยปราศจากความช่วยเหลือ
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

1
ในที่สุดฉันก็ใช้ wget [ตัวเลือก wget] 2> & 1 | grep -i "failed \ | error"
pupeno

1

เนื่องจากwgetเอาต์พุตข้อความทั้งหมดstderrคุณต้องใช้การเปลี่ยนเส้นทางก่อนจึงจะสามารถไพพ์ไปที่ grep:

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

นี่ถือว่าwgetเริ่มต้นบรรทัดข้อผิดพลาดด้วย "wget:"


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

โรงงาน แต่มันจะตัดทอนไฟล์เอาต์พุตซึ่งคุณอาจจะหรืออาจไม่ต้องการ

Curl ดีกว่า:

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

ในกรณีที่มีข้อผิดพลาดจะไม่แก้ไขไฟล์เอาต์พุต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.