Bir değişken üzerinde depolanan argümanı WGET'e nasıl aktarabilirim


10

Ben yaygın wget kullanan bir bash betiği yazıyorum. Tüm ortak parametreleri tek bir yerde tanımlamak için bunları değişkenler üzerinde saklarım. İşte bir kod parçası:

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 "$@"
}

Ne yazık ki çalışmıyor. Her nasılsa, değişkenleri $ useragent, $ save_cookies_cmd, $ load_cookies_cmd ve bu değişkenleri değiştiren caling wget parametrelerini parametreler olarak saklamanın doğru yolunu kaçırıyorum.

Sonuç komut satırını şu şekilde istiyorum:

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

EDIT: Son çözümüm:

Sonunda benim script doğru ile bu çalışıyor:

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" "$@"
}

Tüm yanıtlarınız için teşekkürler.

Yanıtlar:


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 çağrısında "$user_agent"alıntı olduğunu unutmayın. Bu çok önemli.


Diziyi kullanarak akıllı. Yanıtınız için teşekkürler. Kesinlikle daha iyi bash senaryosunu anlamama yardımcı olacaktır.
Filipe

3

Sorun, genişleme sırasında yatmaktadır ( man bashayrıntılar için GENLEŞME bölümüne bakınız). Değişken içindeki çift tırnak, değişken genişletildiğinde çift tırnak olarak çalışmaz:

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

"$ B" kullanmanın size yardımcı olmadığını unutmayın.

Dizileri kullanın, böylece bash'ın zor işi yapmasına izin verebilirsiniz ve alıntı yapmayı ve kaçmayı unutabilirsiniz:

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

Zaman ayırdığınız için teşekkürler. Ben bash senaryosunda acemi oldum ve bu hileler bundan sonra bana her zaman yardımcı olacak.
Filipe

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

Lütfen beni affet ama ben parameterizingsenin fonksiyonunun özgürlüğünü aldım . Değerler Çünkü PARAMSirade sadece o set aklı başında varsayılan izin verir ve henüz hala gibi işlev çağrısı başına değerleri değiştirmek - unset bir değişken set, çok kolay değerlerini geçersiz kılabilir. Örneğin, yukarıdaki işlevde, tüm değerleri olarak ayarladım echove şu şekilde çalıştırıldığında çıktı:

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

Ama ayarlarsanız "$userstring"için NULL:

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

Veya:

    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

Veya:

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

Burada ve burada daha fazla yazdım .parameter expansion

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.