wget を sudo 付きで実行するとエラーが発生するのに、sudo なしで実行すると正常に動作するのはなぜですか?

wget を sudo 付きで実行するとエラーが発生するのに、sudo なしで実行すると正常に動作するのはなぜですか?

次のコマンドを試しました:

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

(からこのSOの投稿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

Ask Ubuntuに関する追加情報

注記:sudoHTTP プロキシ環境変数を渡す場合は、次を試してください。

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 には、実行時に環境変数を保持するための他のオプションがありますsudo

関連情報