Eu tentei o seguinte comando:
$ wget -q --tries=10 --timeout=20 --spider http://google.com
( Nesta postagem da SO . Quero verificar minha conexão com a Internet no bash.)
Recebo a seguinte saída:
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.
Parece OK, no entanto, executando o cmd sudo
, recebo o seguinte:
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’
Eu preciso dessa linha em um script, com o qual chamo sudo
e, portanto, sempre falha.
Alguém pode me dizer o motivo disso? Como posso resolver isso?
wget
no google.com não parece ser uma boa maneira de verificar se uma conexão à Internet está funcionando: por exemplo, você pode estar em uma conexão que permita conexões HTTP ao Google, mas proíbe o que seu script realmente deseja fazer ; ou o Google pode proibir o acesso do wget ao site deles. Qual é o seu problema real, para o qual você acha quesudo wget blah
é uma solução potencial?Respostas:
Você tem um proxy definido em seu ambiente. O seu parece ser
127.0.0.1:3128
.Quando você executa
sudo
, a variável de ambiente proxy não é passada, e é por isso que você não pode resolver diretamentegoogle.com
.Você pode ver qual proxy / proxies você definiu em suas variáveis de ambiente com este comando:
Informações adicionais sobre o Ask Ubuntu
Nota: Se você deseja
sudo
passar a variável de ambiente do proxy HTTP, tente o seguinte:Você também pode passar todas as variáveis de ambiente usando
sudo -E
:O estouro de pilha tem outras opções para manter a variável de ambiente ao
sudo
ing.fonte
sudo -E
para preservar variáveis de ambientesudo http_proxy=$http_proxy wget ...
seria melhor? Se você usar isso em qualquer script, não precisará alterá-lo se o proxy mudar.Defaults env_keep += "http_proxy ftp_proxy"
para/etc/sudoers
fazer com que o sudo preserve automaticamente essas variáveis env.