ฉันจะส่งผ่านอาร์กิวเมนต์ที่เก็บไว้ในตัวแปรไปยัง 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 "$@"
}

Saddly ไม่ทำงาน ยังไงก็เถอะฉันขาดวิธีที่ถูกต้องในการจัดเก็บพารามิเตอร์กับตัวแปร $ useragent, $ save_cookies_cmd, $ load_cookies_cmd และ caling wget ผ่าน vars เหล่านี้เป็นพารามิเตอร์

ฉันต้องการ commandline ผลเช่นนี้:

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"จะถูกยกมา นี่เป็นสิ่งสำคัญ


ฉลาดใช้อาร์เรย์ ขอบคุณสำหรับคำตอบของคุณ มันจะช่วยให้ฉันเข้าใจสคริปต์ทุบตีได้ดีขึ้น
Filipe

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

ขอบคุณที่สละเวลา. ฉันเป็นสามเณรในสคริปต์ทุบตีและเทคนิคเหล่านี้จะช่วยฉันต่อจากนี้ไป
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

โปรดยกโทษให้ฉัน แต่ฉันมีอิสระในการ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

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