त्रुटियों को प्रिंट करना भूल जाते हैं, लेकिन अन्यथा कुछ भी नहीं


27

मैं प्रिंट त्रुटियों को कैसे भूल सकता हूं, लेकिन अन्यथा कुछ भी नहीं?

डिफ़ॉल्ट व्यवहार में, यह एक प्रगति बार और बहुत सारी सामग्री दिखाता है।

-No-verbose संस्करण में अभी भी डाउनलोड की गई फ़ाइल में प्रति पंक्ति एक प्रिंट होती है, यह मुझे नहीं चाहिए।

--Quiet विकल्प इसे पूरी तरह से शांत करने का कारण बनता है, यहां तक ​​कि एक त्रुटि के मामले में, यह कुछ भी प्रिंट नहीं करता है।

क्या कोई ऐसी विधा है जिसमें वह त्रुटियों को अंकित करता है, लेकिन और कुछ नहीं?

जवाबों:


17

इस प्रश्न के बहुत अच्छे उत्तर हैं, उन्हें अवश्य देखें, लेकिन मैंने जो किया है वह यह है:

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

यह एकमात्र जवाब था जिसने मेरे लिए 16.04 ubuntu बैश के साथ काम किया।
23

17

कर्ल का उपयोग करें, कोई भी अनुमान लगाने वाला बिंदु नहीं है कि हर त्रुटि क्या दिखाई देगी।

[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.

एस / - शो त्रुटि

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

और अगर आपको किसी कारण से stdout पर stderr की आवश्यकता है।

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

1
दुर्भाग्य से यह विशिष्ट HTTP त्रुटियों को नहीं संभालता है (जैसे। 404 त्रुटियां इस तरह से दबा दी जाती हैं), जबकि हैकी वेट विधि करता है।
process91

डाउनवोट: यद्यपि आपका सुझाव प्रशंसनीय है, यह प्रश्न का उत्तर नहीं देता है।
स्टीफन रिक्टर

यदि सर्वर एक त्रुटि कोड (जैसे 404) लौटाता है, तो त्रुटि संदेश प्रदर्शित करने में असफल
रहें

यह एक बड़ा जवाब हो सकता है अगर, सवाल कर्ल के बारे में था, या अगर कर्ल में वैज के साथ समानता थी। दुर्भाग्य से न तो मामला है ..
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

और आप बिल्ली को एक grep कमांड में बदल सकते हैं यदि आप फैंसी प्राप्त करना चाहते हैं ...


3
अधिक सरल तरीका: wget -o logfile <url> || बिल्ली लॉगफाइल
kolypto

अधिक सरल तरीका और भी बुरा है क्योंकि आप त्रुटि संदेश को प्रदर्शित करने के अलावा, संभवतः बाहर निकलना चाहते हैं या त्रुटि पर कुछ अलग करना चाहते हैं।
सैम वाटकिंस

2

मानक आउटपुट को पुनर्निर्देशित करें /dev/null, लेकिन शेल के चुनाव में त्रुटि आउटपुट रखें।

बैश में यह होगा:

wget [wget options] > /dev/null

संपादित करें: इसलिए wgetदुर्व्यवहार करता है। यदि सभी त्रुटियों में शब्द "त्रुटि" है, तो आप उन्हें पाइप कर सकते हैंgrep

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

wget सब कुछ stderr को भेजने लगता है।
पिलीनो

मैंने grepकेवल आउटपुट त्रुटियों का उपयोग करते हुए एक और विकल्प जोड़ा
बेन एस

stderrमदद के बिना पाइप के माध्यम से नहीं जाता है।
अगली सूचना तक रोक दिया गया।

1
अंत में मैंने wget का उपयोग किया [wget options] 2> & 1 | grep -i "विफल \" त्रुटि "
पिल्ला स्टेनो

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 --fail --silent --show-error -o /tmp/a http://example.com

एक त्रुटि के मामले में यह आउटपुट फ़ाइल को संशोधित नहीं करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.