การรันเชลล์สคริปต์โดยไม่มีตัวแปรสภาวะแวดล้อม


17

อย่างที่ฉันรู้เชลล์สคริปต์ที่รันใหม่จะสืบทอดตัวแปรสภาพแวดล้อม มีวิธีป้องกันสิ่งนี้หรือไม่? (การรันเชลล์โดยไม่มีการสืบทอดตัวแปร)

คำตอบ:


21

ดูเหมือนว่าคุณสามารถนำหน้าสคริปต์ของคุณenv -iซึ่งจะล้างสภาพแวดล้อมก่อนที่จะเรียกใช้สคริปต์:

env -i sh test.sh

จากman env:

-i, --ignore-environment
              start with an empty environment

ไม่แน่ใจว่าทำไมคุณถึงต้องการทำเช่นนี้ ...


ขอบคุณ สิ่งนี้ได้ผล! ฉันต้องการสิ่งนี้สำหรับการเรียกใช้ build script ใน IDE โดยไม่กระทบกับตัวแปรสภาพแวดล้อมการกำหนดค่าของ IDE แต่ยังห่างไกลจากเป้าหมาย นี่อาจช่วยให้คุณอยากรู้อยากเห็น!
Eonil

หากต้องการเพิ่มกรณีการใช้งานอื่น: ฉันกำลังประเมินปลาและ zsh เป็นทางเลือกแทนการทุบตี แต่ฉันยังไม่พร้อมที่จะโปรโมตเชลล์ตัวเลือกเป็นเชลล์ล็อกอินของฉัน (เหมือนในchsh ...ถ้าฉันเพิ่งเปิดหน้าต่างเทอร์มินัลและเรียกใช้zshหรือfish(โดยมีหรือไม่มีก็ได้-l) มันทำให้สภาพแวดล้อมของฉันแปรปรวนกับตัวแปรทุกชนิดจาก เปลือกผมเริ่มทำมันหลอกลวงด้วย. env -cแก้ปัญหานี้สำหรับฉันฉันทำ. env -i TERM=xterm-256color $(which fish).
Paidhi

สิ่งนี้มีประโยชน์หากคุณมีงาน cron ที่ล้มเหลวเนื่องจากสภาพแวดล้อมไม่ได้รับการกำหนดค่าอย่างเหมาะสมและคุณจำเป็นต้องทดสอบ วิธีที่ดีในการทดสอบว่าสคริปต์ของคุณตั้งสมมติฐานเกี่ยวกับการตั้งค่าสภาพแวดล้อมหรือไม่ ขอบคุณ!
razzed

สถานที่ที่เป็นไปได้อีกแห่งนี้อาจมีประโยชน์คือการทดสอบงานตามระยะเวลา (เช่นงาน cron) เพื่อให้แน่ใจว่าไม่มีการพึ่งพาสภาพแวดล้อมของสคริปต์ สิ่งเดียวกันกับคำสั่งที่จะทำงานในทรัพยากร "Exec" ในรายการหุ่นกระบอก
TommyTheKid

1

ความเป็นไปได้หนึ่งอย่าง (แม้ว่ามันจะดูน่าเกลียด):

exec -c $SCRIPTจะเริ่มต้น $ SCRIPT ด้วยสภาพแวดล้อมที่ว่างเปล่า (ดูการman bashค้นหาexec \[-cl\])


1
สิ่งนี้ใช้ได้ผลกับ env -i เกือบเท่ากัน แต่ฉันเลือกใช้ env -i เพราะ exec หยุดการเรียกใช้สคริปต์ที่เหลือ
Eonil

-1

เท่าที่ฉันรู้คำตอบคือ "ไม่" คุณสามารถแทนที่ตัวแปรสภาพแวดล้อมภายในสคริปต์ได้ ค่าของตัวแปรสภาพแวดล้อมควรเปลี่ยนกลับไปเป็นค่าดั้งเดิมเมื่อสคริปต์ทำงานเสร็จ คุณอาจต้องเรียกใช้สคริปต์เป็นกระบวนการลูก: $ this.script.sh & เพื่อหลีกเลี่ยงการออกจากระบบเชลล์ของคุณครั้งเดียวตลอดเวลาที่คุณเรียกใช้สคริปต์เพื่อรีเซ็ตตัวแปรสภาพแวดล้อมเป็นค่าดั้งเดิม

แก้ไข:

จากโปสเตอร์ก่อนหน้านี้ดูเหมือนว่าฉันผิดที่ไม่สามารถ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.