sh 'unset http_proxy' เปลี่ยนเชลล์ที่เริ่มสำหรับคำสั่งนั้น เมื่อมันจบลง โปรเซส Ruby ของ Rake ยังคงมีสภาพแวดล้อมเดิม และคำสั่ง sh ครั้งต่อไปก็สืบทอดมันอีกครั้ง

หากต้องการเปลี่ยนโปรเซส Ruby สำหรับงานถัดไป:

ENV.delete('http_proxy')
ENV.delete('HTTP_PROXY')

สิ่งนี้ส่งผลต่อโปรเซสลูกในภายหลังและโค้ด Ruby ที่อ่านคีย์เหล่านั้น มัน ไม่ได้กำหนดค่าเทอร์มินัลที่เริ่ม Rake ในตอนแรกใหม่

สำหรับคำสั่งลูกหนึ่งคำสั่ง ให้ระบุสภาพแวดล้อมของมันโดยตรง:

sh(
  { 'http_proxy' => nil, 'HTTP_PROXY' => nil },
  'ruby', 'download.rb'
)

อินเทอร์เฟซการเริ่มโปรเซสของ Ruby ถือว่าค่า nil คือการลบออกจากสภาพแวดล้อมของโปรเซสลูกนั้น Rake ส่งรายการอาร์กิวเมนต์ไปยังอินเทอร์เฟซนั้น โดยปล่อยให้ ENV ของตัวเองไม่เปลี่ยนแปลง

ลบคีย์ที่เกี่ยวข้องกับไคลเอนต์จริง การดำเนินการ HTTPS อาจใช้ https_proxy ด้วย และไคลเอนต์บางตัวอ่าน ALL_PROXY หรือไฟล์กำหนดค่าอื่น การลบคีย์ HTTP เพียงตัวเดียวไม่ใช่คำแนะนำเส้นทางตรงแบบสากล

รูปแบบหลายอาร์กิวเมนต์แยกอาร์กิวเมนต์ของไฟล์ที่เรียกใช้ไว้ด้วยกัน ไม่จำเป็นต้องสร้างสตริงเชลล์ที่มีคำสั่งลบและ URL

บทความที่เกี่ยวข้อง