我正在尝试在wget
中设置标头。在命令行中,当我运行wget -d --header="User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"' http://website.com -O index
时,它会按预期工作。
然而,一旦我将标题更改为变量并尝试运行以下wget
命令,它就会停止工作:
header='-d --header="User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"'
wget "$header" http://google.com -O index
错误:
wget: invalid option -- ' '
wget: invalid option -- '-'
wget: invalid option -- '-'
Usage: wget [OPTION]... [URL]...
使用变量时必须使用双引号。否则,它将被扩展为多个单词。另一方面,不需要对变量值引用两次。以下内容应该有效:
header='--header=User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11'
wget "$header" http://website.com -O index
编辑:如果要为多个参数使用变量,请使用数组:
args=(-d '--header=User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11')
wget "${args[@]}" http://website.com -O index
而不是这个
wget $header http://website.com -O index
试试这个,
wget "$header" http://website.com -O index
当您为标题文本分配标题变量时,标题文本中的空格会被打断。要解决这个问题,必须用引号"将变量括起来。
评论后:试试这个-
someheader="-d --header='User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11'"
wget "$someheader" http://website.com -O index
名称标头似乎与--标头冲突。或者,可以是引号,而不是复制键入它们然后重试。不过,奇怪!
COMMENT:'nosid关于bash数组的技巧对我有用。在我的例子中,相关代码是:
WGET_OPTS="-r -N -nd -np -nH --timeout=120 --tries=3"
WGET_OPTS_ARRAY=(${WGET_OPTS// / })
wget "${WGET_OPTS_ARRAY[@]}" -A "$FILE_PAT" -P "$TO_DIR" "$FROM_URL"
您只需要像这样逃离-d
:
header='-d --header="User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"'
选项"-d";显示yuor请求的头,并且在头shell变量中没有include,比如"-O索引.html";选项:用于将输出保存到本地文件";index.html";。如果执行:
header='--header="User-Agent: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11"'
wget -d "$header" http://google.com -O index
它应该起作用。