0

我正在尝试在程序开始时为 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 不存在”的错误,因此我想它也忽略了用户代理字符串......

那么我做错了什么?我尝试将 " 更改为 ' 或 $() ...

奇怪的是,如果我在终端中执行:

wget -U $USER_AGENT -a $WGET_LOG_FILE --no-clobber --wait=2 --random-wait www.webpage.com

它可以工作,所以我猜它是在某个子shell中执行的,这就是它没有得到它的原因。

所以问题是:

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

谢谢

4

1 回答 1

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
于 2013-02-07T20:19:57.637 回答