我正在尝试在程序开始时为wget设置属性,以便将它们用于所有wget实例。
WGET_LOG_FILE=path/to/wget_log
USER_AGENT='Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0x'
WGET="wget -U $USER_AGENT -a $WGET_LOG_FILE --no-clobber --wait=2 --random-wait"
$WGET www.webpage.com
问题是它忽略了日志并将所有内容定向到输出或者给出了“path / to / wget_log不存在”的错误,因此我想它也会忽略用户代理字符串......
那么我做错了什么?我试过改变“to”或$()......
奇怪的是,如果我在终端执行:
wget -U $USER_AGENT -a $WGET_LOG_FILE --no-clobber --wait=2 --random-wait www.webpage.com
它有效,所以我猜它是在某个子shell中执行的,这就是为什么它没有得到它。
所以问题是:
由于
答案 0 :(得分:4)
通常,您不应该依赖于将参数扩展为要运行的命令的名称及其参数;对于简单的情况,它可以正常工作,但您可能会很快遇到麻烦。我无法准确解释您所看到的错误(因为您没有引用$USER_AGENT
,即使您的第三个示例有效,我也感到惊讶。)
由于您使用的是bash
,因此您应该使用数组来保存参数,然后显式调用wget
并展开数组以提供参数。
WGET_LOG_FILE=path/to/wget_log
USER_AGENT='Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0x'
wget_args=( "-U" "$USER_AGENT"
"-a" "$WGET_LOG_FILE"
"--no-clobber"
"--wait=2"
"--random-wait")
wget "${wget_args[@]}" www.webpage.com