อย่างที่ฉันรู้เชลล์สคริปต์ที่รันใหม่จะสืบทอดตัวแปรสภาพแวดล้อม มีวิธีป้องกันสิ่งนี้หรือไม่? (การรันเชลล์โดยไม่มีการสืบทอดตัวแปร)
อย่างที่ฉันรู้เชลล์สคริปต์ที่รันใหม่จะสืบทอดตัวแปรสภาพแวดล้อม มีวิธีป้องกันสิ่งนี้หรือไม่? (การรันเชลล์โดยไม่มีการสืบทอดตัวแปร)
คำตอบ:
ดูเหมือนว่าคุณสามารถนำหน้าสคริปต์ของคุณenv -iซึ่งจะล้างสภาพแวดล้อมก่อนที่จะเรียกใช้สคริปต์:
env -i sh test.sh
จากman env:
-i, --ignore-environment
start with an empty environment
ไม่แน่ใจว่าทำไมคุณถึงต้องการทำเช่นนี้ ...
chsh ...ถ้าฉันเพิ่งเปิดหน้าต่างเทอร์มินัลและเรียกใช้zshหรือfish(โดยมีหรือไม่มีก็ได้-l) มันทำให้สภาพแวดล้อมของฉันแปรปรวนกับตัวแปรทุกชนิดจาก เปลือกผมเริ่มทำมันหลอกลวงด้วย. env -cแก้ปัญหานี้สำหรับฉันฉันทำ. env -i TERM=xterm-256color $(which fish).
ความเป็นไปได้หนึ่งอย่าง (แม้ว่ามันจะดูน่าเกลียด):
exec -c $SCRIPTจะเริ่มต้น $ SCRIPT ด้วยสภาพแวดล้อมที่ว่างเปล่า (ดูการman bashค้นหาexec \[-cl\])
เท่าที่ฉันรู้คำตอบคือ "ไม่" คุณสามารถแทนที่ตัวแปรสภาพแวดล้อมภายในสคริปต์ได้ ค่าของตัวแปรสภาพแวดล้อมควรเปลี่ยนกลับไปเป็นค่าดั้งเดิมเมื่อสคริปต์ทำงานเสร็จ คุณอาจต้องเรียกใช้สคริปต์เป็นกระบวนการลูก: $ this.script.sh & เพื่อหลีกเลี่ยงการออกจากระบบเชลล์ของคุณครั้งเดียวตลอดเวลาที่คุณเรียกใช้สคริปต์เพื่อรีเซ็ตตัวแปรสภาพแวดล้อมเป็นค่าดั้งเดิม
แก้ไข:
จากโปสเตอร์ก่อนหน้านี้ดูเหมือนว่าฉันผิดที่ไม่สามารถ