为什么在使用sudo执行时wget会给出错误,但在没有该命令的情况下可以正常工作?


21

我尝试了以下命令:

$ wget -q --tries=10 --timeout=20 --spider http://google.com

(从这篇SO帖子中。我要检查bash中的Internet连接。)

我得到以下输出:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://google.com/
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA [following]
Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

似乎还可以,但是使用运行cmd sudo,我收到以下消息:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:27--  http://google.com/
Resolving google.com (google.com)... failed: Name or service not known.
wget: unable to resolve host address google.com

我需要在脚本中调用此行sudo,因此它总是失败。

有人可以告诉我原因吗?我该如何解决?


抱歉,我实际上想在AskUbuntu中创建问题。不知道这里是否是
热门

11
这里是话题。
Deltik

4
那将是非主题。
SnakeDoc

这看起来像XY问题wget对google.com 执行随机检查似乎不是检查互联网连接是否正常的好方法:例如,您的连接可能允许与Google的HTTP连接,但禁止脚本真正执行的操作; 否则Google可能会禁止wget访问其网站。您遇到的实际问题是什么,您认为这sudo wget blah是潜在的解决方案?
David Richerby

Answers:


39

您在环境中定义了一个代理。您的似乎是127.0.0.1:3128

运行时sudo,不会传递代理环境变量,这就是为什么您不能直接解析的原因google.com

您可以使用以下命令查看在环境变量中定义的代理/代理:

env | grep proxy

有关Ask Ubuntu的其他信息

注意:如果要sudo传递HTTP代理环境变量,请尝试以下操作:

sudo http_proxy="$http_proxy" wget -q --tries=10 --timeout=20 --spider http://google.com

您还可以使用sudo -E以下命令传递所有环境变量:

sudo -E wget -q --tries=10 --timeout=20 --spider http://google.com

堆栈溢出还有其他选择,可以在sudoing 时保持环境变量。


5
好的,非常感谢您不仅发布了答案,而且还发布了解释链接。完美地为我工作。
h0ch5tr4355 2015年

7
您还可以sudo -E用来保留环境变量
Squidly 2015年

4
仅通过http_proxy会sudo http_proxy=$http_proxy wget ...更好吗?如果您在任何脚本中使用它,则代理更改时不必更改它。
2015年

1
好人,@ Josef。我已根据您的建议更新了答案。
Deltik

1
您还可以添加Defaults env_keep += "http_proxy ftp_proxy"使其/etc/sudoers使sudo自动保留那些env变量。
弗朗索瓦·
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.