在bash脚本中定义wget的属性

时间:2013-02-07 20:05:25

标签: bash attributes wget

我正在尝试在程序开始时为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中执行的,这就是为什么它没有得到它。

所以问题是:

  1. 如何在bash脚本中正确设置wget属性?由Chepner回答
  2. 如何检查wget是否正在使用指定的用户代理?只需忘记任何用户代理检查网页,例如:http://whatsmyuseragent.com/
  3. 获取网页的等待率是2秒吗?
  4. 由于

1 个答案:

答案 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