কীভাবে আমি WGET এ ভেরিয়েবলে সঞ্চিত যুক্তিটি পাস করতে পারি


10

আমি একটি বাশ স্ক্রিপ্ট লিখছি যা ব্যাপকভাবে উইজেট ব্যবহার করে। সমস্ত সাধারণ পরামিতি এক জায়গায় সংজ্ঞায়িত করতে আমি সেগুলি ভেরিয়েবলগুলিতে সঞ্চয় করি। এখানে কোডের একটি অংশ রয়েছে:

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

দুঃখজনকভাবে কাজ করছে না। কোনওভাবে আমি ভেরিয়েবল $ ইউজারেজেন্ট, $ সেভ_কুকিজ_সিএমডি, $ লোড_কুকিজ_সিএমডি এবং ক্যালিং উইজেটগুলিকে পরামিতি হিসাবে পাস করার সঠিক উপায়টি অনুপস্থিত।

আমি ফলাফল কমান্ডলাইনটি এটি হিসাবে চাই:

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

মনে রাখবেন যে উইজেটে কলটিতে "$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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.