อย่างที่ฉันรู้เชลล์สคริปต์ที่รันใหม่จะสืบทอดตัวแปรสภาพแวดล้อม มีวิธีป้องกันสิ่งนี้หรือไม่? (การรันเชลล์โดยไม่มีการสืบทอดตัวแปร)
อย่างที่ฉันรู้เชลล์สคริปต์ที่รันใหม่จะสืบทอดตัวแปรสภาพแวดล้อม มีวิธีป้องกันสิ่งนี้หรือไม่? (การรันเชลล์โดยไม่มีการสืบทอดตัวแปร)
คำตอบ:
ดูเหมือนว่าคุณสามารถนำหน้าสคริปต์ของคุณ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 & เพื่อหลีกเลี่ยงการออกจากระบบเชลล์ของคุณครั้งเดียวตลอดเวลาที่คุณเรียกใช้สคริปต์เพื่อรีเซ็ตตัวแปรสภาพแวดล้อมเป็นค่าดั้งเดิม
แก้ไข:
จากโปสเตอร์ก่อนหน้านี้ดูเหมือนว่าฉันผิดที่ไม่สามารถ