wget

2010-11-07 13 views
7

मैं एक बैश फ़ाइल (.sh) बनाना चाहते हैं जो निम्नलिखित है:wget

मैं ./download.sh www.blabla.com/bla.jpg

तरह स्क्रिप्ट फोन

स्क्रिप्ट को तब गूंजना पड़ता है जब फ़ाइल डाउनलोड हो या नहीं ...

मैं यह कैसे कर सकता हूं? मुझे पता है कि मैं एररलेवल का उपयोग कर सकता हूं लेकिन मैं लिनक्स के लिए नया हूं इसलिए ...

अग्रिम धन्यवाद!

उत्तर

6

लिनक्स में आमतौर पर अनुप्रयोग पर्यावरण चर $ के मूल्य निर्धारित करेंगे? विफलता पर आप इस रिटर्न कोड की जांच कर सकते हैं और देख सकते हैं कि यह आपको wget के लिए कोई त्रुटि देता है या नहीं।

#!/bin/bash 
wget $1 2>/dev/null 
export RC=$? 
if [ "$RC" = "0" ]; then 
    echo $1 OK 
else 
    echo $1 FAILED 
fi 

आप इस स्क्रिप्ट को डाउनलोड कर सकते हैं .sh। Chmod 755 के साथ अनुमतियों को 755 में बदलें। इसे उस फ़ाइल के नाम से कॉल करें जिसे आप डाउनलोड करना चाहते हैं। ./download.sh www.google.com

+0

ठीक है .. क्या आप मुझे एक उदाहरण प्रदान कर सकते हैं, इसलिए जब फ़ाइल डाउनलोड की जाती है, तो स्क्रिप्ट इको का "ठीक" कुछ और "FAILED" जैसा होता है ... – CyberK

+1

स्क्रिप्ट को ठीक करने और इसमें विफल होने के लिए बदल दिया गया। इसे एक बेहतर उदाहरण बना दिया। – ojblass

+0

@ साइबरके: आप संभावित रूप से wgets आउटपुट को दबाना चाहते हैं: 'wget $ 1 2>/dev/null' – thejh

3

आप की तरह कुछ की कोशिश कर सकते:

#!/bin/sh 

[ -n $1 ] || { 
    echo "Usage: $0 [url to file to get]" >&2 
    exit 1 
} 

wget $1 

[ $? ] && { 
    echo "Could not download $1" | mail -s "Uh Oh" [email protected] 
    echo "Aww snap ..." >&2 
    exit 1 
} 

# If we're here, it downloaded successfully, and will exit with a normal status 

जब एक स्क्रिप्ट है कि (संभावना) अन्य स्क्रिप्ट बुलाया जाएगा बनाने, यह महत्वपूर्ण है निम्न कार्य करें:

  • सुनिश्चित तर्क विवेक
  • संदेश ई-मेल, एक लॉग करने के लिए लिखते हैं, या कुछ और करने तो कोई जानता है कि क्या हो गया था गलत

>&2 बस stderror को त्रुटि संदेशों में से उत्पादन है, जो एक फोन करने स्क्रिप्ट कुछ इस तरह करने की अनुमति देता पुनर्निर्देश: चूंकि यह एक छोटी आवरण है

foo-downloader >/dev/null 2>/some/log/file.txt 

, विवेक :)

का एक सा त्यागना करने का कोई कारण

यह भी आप चुनिंदा /dev/null को wget के उत्पादन में निर्देशित करने के लिए अनुमति देता है, आप वास्तव में खासकर यदि आप एक ई मेल यह असफल :)

0

wget गैर-सहभागी में कार्यान्वित कह मिलता है, यह देखने के लिए जब परीक्षण चाहते हो सकता है मार्ग। इसका मतलब है कि पृष्ठभूमि में काम करना है और आप $ के साथ रिटर्न कोड नहीं पकड़ सकते हैं?

wget --server-response -q -o wgetOut http://www.someurl.com 
sleep 5 
_wgetHttpCode=`cat wgetOut | gawk '/HTTP/{ print $2 }'` 
if [ "$_wgetHttpCode" != "200" ]; then 
    echo "[Error] `cat wgetOut`" 
fi 

नोट::

एक समाधान यह http 200 स्थिति कोड खोज उदाहरण के लिए, "--server-प्रतिक्रिया" संपत्ति को संभालने के लिए है wget, अपने काम खत्म करने के लिए कुछ समय की जरूरत है कि कारण मैं डाल के लिए "नींद 5"। यह करने का सबसे अच्छा तरीका नहीं है लेकिन समाधान के परीक्षण के लिए ठीक काम किया।

संबंधित मुद्दे