Fil*_*ipe 10 bash wget variable-substitution
我正在编写一个广泛使用 wget 的 bash 脚本。为了在一个地方定义所有通用参数,我将它们存储在变量中。这是一段代码:
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 "$@"
}
Run Code Online (Sandbox Code Playgroud)
可悲的是不起作用。不知何故,我缺少将参数存储在变量 $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
Run Code Online (Sandbox Code Playgroud)
编辑:我的最终解决方案:
最后,我的脚本正确地使用了这个:
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" "$@"
}
Run Code Online (Sandbox Code Playgroud)
感谢您的所有回复。
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[@]}" "$@"
}
Run Code Online (Sandbox Code Playgroud)
请注意,在 wget 调用中,"$user_agent"
引用了 。这一点至关重要。