Próbowałem następującego polecenia:
$ wget -q --tries=10 --timeout=20 --spider http://google.com
(Z tego posta SO . Chcę sprawdzić moje połączenie internetowe w bash.)
Otrzymuję następujące dane wyjściowe:
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.
Wydaje się OK, jednak uruchamiając cmd z sudo
, otrzymuję to:
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’
Potrzebuję tej linii w skrypcie, do którego dzwonię, sudo
więc zawsze się nie udaje.
Czy ktoś może mi powiedzieć, dlaczego? Jak mogę to obejść?
wget
przeciwko google.com nie wydaje się dobrym sposobem na sprawdzenie, czy połączenie internetowe działa: na przykład możesz mieć połączenie, które zezwala na połączenia HTTP z Google, ale zabrania tego, co skrypt naprawdę chce zrobić ; lub Google może zabronić wgetowi dostępu do ich witryny. Jaki masz faktyczny problem, który Twoim zdaniemsudo wget blah
jest potencjalnym rozwiązaniem?Odpowiedzi:
Masz proxy zdefiniowane w swoim środowisku. Twój wydaje się być
127.0.0.1:3128
.Po uruchomieniu
sudo
zmienna środowiskowa proxy nie jest przekazywana, dlatego nie można bezpośrednio rozwiązaćgoogle.com
.Za pomocą tego polecenia możesz zobaczyć, jakie proxy / proxy zdefiniowałeś w zmiennych środowiskowych:
Dodatkowe informacje na temat Ask Ubuntu
Uwaga: jeśli chcesz
sudo
przekazać zmienną środowiskową proxy HTTP, spróbuj tego:Możesz również przekazać wszystkie zmienne środowiskowe, używając
sudo -E
:Przepełnienie stosu ma inne opcje zachowania zmiennej środowiskowej podczas
sudo
ing.źródło
sudo -E
do zachowania zmiennych środowiskowychsudo http_proxy=$http_proxy wget ...
byłoby lepiej? Jeśli użyjesz tego w dowolnym skrypcie, nie musisz go zmieniać, jeśli zmienia się serwer proxy.Defaults env_keep += "http_proxy ftp_proxy"
do,/etc/sudoers
aby sudo automatycznie zachowywał te zmienne env.