gpt4 book ai didi

bash - 如何将存储在变量上的参数传递给 WGET

转载 作者:行者123 更新时间:2023-12-05 05:27:00 27 4
gpt4 key购买 nike

我正在编写一个广泛使用 wget 的 bash 脚本。为了在一个地方定义所有公共(public)参数,我将它们存储在变量中。这是一段代码:

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 "$@"
}

遗憾的是没有工作。不知何故,我错过了在变量 $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

最佳答案

设置$useragent时去掉内引号,使用时保留双引号:

useragent='--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0'
...
wget "$useragent" $load_cookies_cmd "$@"

要了解其工作原理,请注意 wget --user-agent="string with spaces" 完全等同于 wget "--user-agent=string with spaces"。 Wget 接收(并且必须要求)--user-agent=... 选项作为单个参数,无论引号的位置如何。

引号用于防止 shell 拆分字符串,这就是为什么 wget "$useragent" 是必要的。另一方面,用户代理的定义需要引用才能使分配工作,但不需要第二级别的引用,因为 Wget 会看到这些引用并成为用户的一部分- 通过网络发送的代理 header ,这是您不想要的。

关于bash - 如何将存储在变量上的参数传递给 WGET,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22517676/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com