ทำไม wget ให้ข้อผิดพลาดเมื่อดำเนินการด้วย sudo แต่ทำงานได้ดีโดยไม่ต้อง?


21

ฉันลองคำสั่งต่อไปนี้:

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

(จากโพสต์ดังนั้นฉันต้องการตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของฉันในทุบตี)

ฉันได้รับผลลัพธ์ต่อไปนี้:

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จริง ๆ ไม่แน่ใจว่าเป็นหัวข้อที่นี่หรือไม่
h0ch5tr4355

11
มันอยู่ในหัวข้อที่นี่
Deltik

4
มันจะเป็นนอกหัวข้อ
SnakeDoc

ลักษณะนี้เช่นปัญหา XY การดำเนินการสุ่มwgetกับ google.com ดูเหมือนจะไม่เป็นวิธีที่ดีในการตรวจสอบว่าการเชื่อมต่ออินเทอร์เน็ตทำงาน: ตัวอย่างเช่นคุณอาจใช้การเชื่อมต่อที่อนุญาตการเชื่อมต่อ HTTP กับ Google แต่ห้ามสิ่งที่สคริปต์ของคุณต้องการทำจริงๆ ; หรือ Google อาจห้ามการเข้าถึงเว็บไซต์ของพวกเขา ปัญหาที่แท้จริงของคุณคืออะไรซึ่งคุณคิดว่าsudo wget blahเป็นทางออกที่เป็นไปได้
David Richerby

คำตอบ:


39

คุณมีพร็อกซีที่กำหนดไว้ในสภาพแวดล้อมของคุณ 127.0.0.1:3128ขอแสดงที่ดูเหมือนจะเป็น

เมื่อคุณเรียกใช้ตัวแปรสภาพแวดล้อมพร็อกซีไม่ผ่านซึ่งเป็นเหตุผลที่คุณไม่สามารถแก้ไขได้โดยตรงsudogoogle.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

Stack Overflow มีตัวเลือกอื่นสำหรับการรักษาตัวแปรสภาพแวดล้อมเมื่อsudoเปิด


5
ตกลงขอบคุณมากที่ไม่เพียง แต่โพสต์คำตอบเท่านั้น แต่ยังโพสต์ลิงก์สำหรับคำอธิบายด้วย ทำงานให้ฉันอย่างสมบูรณ์แบบ
h0ch5tr4355

7
นอกจากนี้คุณยังสามารถใช้sudo -Eเพื่อรักษาตัวแปรสภาพแวดล้อม
Squidly

4
สำหรับการส่ง http_proxy เพียงอย่างเดียวจะไม่sudo http_proxy=$http_proxy wget ...ดีกว่าหรือ หากคุณใช้สิ่งนั้นในสคริปต์ใด ๆ คุณไม่จำเป็นต้องเปลี่ยนแปลงหากพร็อกซีมีการเปลี่ยนแปลง
Josef

1
นิสัยดี @Josef ฉันได้อัปเดตคำตอบพร้อมคำแนะนำของคุณแล้ว
Deltik

1
คุณยังสามารถเพิ่มDefaults env_keep += "http_proxy ftp_proxy"เพื่อ/etc/sudoersให้ sudo รักษาตัวแปร env เหล่านั้นโดยอัตโนมัติ
Francois
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.