मैं WGET के लिए एक चर पर संग्रहीत तर्क को कैसे पारित कर सकता हूं


10

मैं एक बैश स्क्रिप्ट लिख रहा हूं जो बड़े पैमाने पर wget का उपयोग करता है। एक ही स्थान पर सभी सामान्य मापदंडों को परिभाषित करने के लिए मैं उन्हें चर पर संग्रहीत करता हूं। यहाँ एक कोड है:

useragent='--user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"'
cookies_file="/tmp/wget-cookies.txt"
save_cookies_cmd="--save-cookies $cookies_file --keep-session-cookies"
load_cookies_cmd="--load-cookies $cookies_file --keep-session-cookies"

function mywget {
    log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $quiet $useragent $load_cookies_cmd $@"  
    wget $useragent $load_cookies_cmd "$@"
}

अफसोस की बात है काम नहीं कर रहा है। किसी तरह मैं वेरिएबल $ useragent, $ save_cookies_cmd, $ load_cookies_cmd और caling wget पर पैरामीटर्स को स्टोर करने का सही तरीका याद कर रहा हूं और इन वैरिएंट्स को पैरामीटर्स के रूप में पास कर रहा हूं।

मैं इस रूप में परिणाम कमांडलाइन चाहता हूं:

wget --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0" --load-cookies /tmp/wget-cookies.txt --keep-session-cookies http://mysite.local/myfile.php

संपादित करें: मेरा अंतिम समाधान:

अंत में मेरी स्क्रिप्ट इसके साथ सही ढंग से काम कर रही है:

useragent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"
useragent_cmd="--user-agent=$useragent"
cookies_file="/tmp/wget-cookies.txt"
save_cookies_cmd="--save-cookies $cookies_file --keep-session-cookies"
load_cookies_cmd="--load-cookies $cookies_file --keep-session-cookies"

function mywget {
    log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $load_cookies_cmd $useragent_cmd $@"  
    wget $load_cookies_cmd "$useragent_cmd" "$@"
}

आपकी सभी प्रतिक्रियाओं के लिए धन्यवाद।

जवाबों:


4

http://mywiki.wooledge.org/BashFAQ/050

user_agent='--user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0"'
cookies_file="/tmp/wget-cookies.txt"
save_cookies_opts=( --save-cookies "$cookies_file" --keep-session-cookies )
load_cookies_opts=( --load-cookies "$cookies_file" --keep-session-cookies )

function mywget {
    log "#!!!!!!!!!# WGET #!!!!!!!!!# wget $quiet $useragent $load_cookies_cmd $@"
    wget "$user_agent" "${load_cookies_opts[@]}" "$@"
}

ध्यान दें कि wget कॉल में, "$user_agent"उद्धृत किया गया है। यह महत्वपूर्ण है।


सरणी का उपयोग करते हुए चतुर। आपके प्रतिक्रिया के लिए धन्येवाद। यह निश्चित रूप से बेहतर बैश स्क्रिप्ट को समझने में मेरी मदद करेगा।
फिलिप

3

समस्या विस्तार के क्रम में है ( man bashविवरण के लिए विवरण देखें)। एक चर के अंदर डबल कोट्स जब चर का विस्तार होता है तो दोहरे उद्धरण चिह्नों के रूप में काम नहीं करते हैं:

$ a='1 "2 3" 4' ; for b in $a ; do echo $b ; done
1
"2
3"
4

ध्यान दें कि "$ b" का उपयोग करने से आपको मदद नहीं मिलती है।

सरणियों का उपयोग करें, ताकि आप कड़ी मेहनत कर सकते हैं और आप उद्धरण और भागने के बारे में भूल सकते हैं:

$ a=(1 '2 3' 4) ; for b in "${a[@]}" ; do echo $b ; done
1
2 3
4

आपके समय के लिए धन्यवाद। मैं बैश स्क्रिप्ट में नौसिखिया हूं और ये तरकीबें अब से हमेशा मेरी मदद करेंगी।
फिलिप

3
    mywget() ( echo log "wget $quiet \
                         userstring=${userstring:-unset} \
                         cookies=${cookies:-no} $@"
            echo wget ${userstring:+--useragent="$userstring"} \
                    ${cookies:+--${cookies}-cookies \
                    "$cookies_file" --keep-session-cookies} "$@"
    ) <<-PARAMS
            ${DQ=$(printf \\042)}
            ${NL=
}
            ${userstring="${DQ}Mozilla/5.0 \
                (Windows NT 6.1; WOW64; rv:27.0) \
                Gecko/20100101 Firefox/27.0${DQ}"}
            ${cookies_file="/tmp/wget-cookies.txt"}
            ${cookies=save}
    PARAMS

कृपया मुझे क्षमा करें, लेकिन मैंने parameterizingआपके कार्य की स्वतंत्रता ले ली है । क्योंकि मूल्यों में केवल एक अस्थिर चर सेट किया PARAMSजाएगा , आप उनके मूल्यों को बहुत आसानी से ओवरराइड कर सकते हैं - यह आपको साने डिफॉल्ट सेट करने की अनुमति देता है और फिर भी आपकी पसंद के अनुसार फ़ंक्शन कॉल के अनुसार मान बदलता है। उदाहरण के लिए, उपरोक्त फ़ंक्शन में, मैंने सभी मानों को यहाँ सेट किया है और जब जैसा है तब आउटपुट यहाँ है:echo

log wget  userstring="Mozilla/5.0 \
    (Windows NT 6.1; WOW64; rv:27.0) \
    Gecko/20100101 Firefox/27.0" \
    cookies=save
wget --useragent="Mozilla/5.0 \
    (Windows NT 6.1; WOW64; rv:27.0) \
    Gecko/20100101 Firefox/27.0" \
    --save-cookies /tmp/wget-cookies.txt \
    --keep-session-cookies

लेकिन अगर मैं सेट "$userstring"करने के लिए NULL:

    userstring= mywget
log wget  userstring=unset cookies=save
wget --save-cookies /tmp/wget-cookies.txt --keep-session-cookies

या:

    cookies=load cookies_file=/some/other/cookie.file mywget
log wget  userstring="Mozilla/5.0 \
    (Windows NT 6.1; WOW64; rv:27.0) \
    Gecko/20100101 Firefox/27.0" \
    cookies=load
wget --useragent="Mozilla/5.0 \
    (Windows NT 6.1; WOW64; rv:27.0) \
    Gecko/20100101 Firefox/27.0" \
    --load-cookies /some/other/cookie.file \
    --keep-session-cookies

या:

    cookies= userstring= mywget
log wget  userstring=unset cookies=no
wget

मैंने यहाँ और यहाँ पर अधिक लिखा हैparameter expansion

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