ทำไมการรัน set-proxy.sh จึงไม่เปลี่ยนเทอร์มินัลของคุณ
สคริปต์ที่รันแล้วไม่สามารถส่งออกตัวแปรกลับไปยังเชลล์แม่ได้ ใช้ source กับไฟล์กำหนดค่าที่เชื่อถือได้เมื่อเชลล์ปัจจุบันต้องเก็บการตั้งค่าไว้
สคริปต์ของคุณมีบรรทัด export https_proxy=... ที่ถูกต้อง คุณรันมัน แล้วคำสั่งถัดไปก็ยังเห็น proxy ตัวเก่า สคริปต์อาจทำงานได้อย่างสมบูรณ์ภายในโปรเซสของมันเอง
การรันสคริปต์จะเริ่มเชลล์แยกต่างหาก มันส่งตัวแปรไปยังคำสั่งที่มันเริ่มได้ แต่ไม่สามารถแทนที่สภาพแวดล้อมของเชลล์แม่ของเทอร์มินัลหลังจากที่มันจบได้
./set-proxy.sh
. ./set-proxy.sh
ทั้งสองเป็นการดำเนินการที่ต่างกัน อย่างที่สองใช้ builtin dot ของเชลล์เพื่ออ่านไฟล์ในเชลล์ปัจจุบัน Bash เรียกสิ่งนี้ว่า source ด้วย ดูเอกสารอ้างอิง builtin ของมัน
ใช้ source เฉพาะไฟล์ที่คุณเชื่อถือ เพราะคำสั่งเชลล์ทั้งหมดของไฟล์นั้นทำงานในบริบทปัจจุบันนั้น ถ้าต้องการ proxy สำหรับคำสั่งภายในสคริปต์เท่านั้น การรันตามปกติคือขอบเขตที่ถูกต้อง สำหรับคำสั่งภายนอกเพียงคำสั่งเดียว การกำหนด proxy ที่จำกัดเฉพาะคำสั่ง จะหลีกเลี่ยงการเปลี่ยนเชลล์ปัจจุบัน
เก็บการกำหนดตัวแปรไว้ตามตัวอักษร Backtick หมายถึงการแทนที่คำสั่ง ไม่ใช่การอ้างอิง บรรทัดที่กำหนด proxy ไม่ควรพยายามรัน URL ของมันโดยไม่ตั้งใจ สำหรับค่าที่ตั้งใจจะเลือกปลายทางสาธารณะ รายการ proxy ฟรี มีผู้สมัครที่โปรโตคอลต้องตรงกับไคลเอนต์ สุดท้าย ตรวจสอบชื่อตัวแปรที่ไคลเอนต์เครือข่ายจริงอ่าน การแก้ขอบเขตของเชลล์ไม่ได้ทำให้ตัวแปรที่ไม่รองรับมีผล