為什麼 wget 在使用 sudo 執行時會出錯,但不使用 sudo 卻可以正常工作?

為什麼 wget 在使用 sudo 執行時會出錯,但不使用 sudo 卻可以正常工作?

我嘗試了以下命令:

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

(從這個帖子。我想在 bash 中檢查我的網路連線。

我得到以下輸出:

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,所以它總是失敗。

有人能告訴我這是為什麼嗎?我該如何解決這個問題?

答案1

您在您的環境中定義了一個代理程式。你的似乎是127.0.0.1:3128

當您運行時sudo,代理環境變數未傳遞,這就是您無法直接解析的原因google.com

您可以使用以下命令查看您在環境變數中定義的代理:

env | grep proxy

有關詢問 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

Stack Overflow 還有其他選項可以在 ing 時保留環境變數sudo

相關內容