จะรีเซ็ตสภาพแวดล้อมของเชลล์ได้อย่างไร?


25

ปัญหานี้บักฉันมาระยะหนึ่งแล้วและถึงแม้ว่าฉันคิดว่าฉันพบคำตอบของฉันผ่านEnvWatcherแต่น่าเสียดายที่มันใช้ได้กับ Bash เท่านั้น และฉันใช้ zsh

ฉันต้องการจำลองสิ่งที่ env-watcher ทำในระดับที่น้อยกว่านี้ แต่ฉันต้องรู้ว่ามีคำสั่งที่ฉันสามารถรีเซ็ตเชลล์ให้อยู่ในระดับเริ่มต้นที่สะอาดหรือไม่

ตัวอย่างเช่นฉันต้องการมีเวิร์กโฟลว์ต่อไปนี้

source some-functions
alias another-thing
export SVN_EDITOR=vim
RESET-ZSH # none of the above are valid any more

มีความเป็นไปได้ในตัวเช่นนี้หรือฉันกำลังไล่ล่าผีเสื้อ?

คำตอบ:


32

คุณสามารถทำได้exec zshซึ่งจะให้ zsh ใหม่และเรียกใช้ฟังก์ชัน init ใหม่ โปรดทราบว่าคุณจะต้องให้exec zsh -lzsh เข้าสู่ระบบเพื่อรักษาสถานะ "login shell" ฉันไม่ทราบว่ามันรักษาประวัติคำสั่งได้ดีเพียงใด (ดูเหมือนว่าจะใช้งานได้ดีสำหรับฉัน แต่ถ้าคุณใช้เชลล์จำนวนมากในเทอร์มินัลต่างกันคุณอาจได้รับ 'crosstalk' ระหว่างประวัติเชลล์ทั้งสอง)


4
นั่นจะไม่ยกเลิกการส่งออกตัวแปรสภาพแวดล้อมใช่มั้ย (แม้ว่าสิ่งใดก็ตามที่ถูกกำหนดโดยไฟล์ init ของคุณจะถูกรีเซ็ต)
cjm

อาจจะไม่ ฉันไม่ได้พิจารณาเรื่องนั้นเพราะฉันไม่ได้คิดถึงตัวแปรสภาพแวดล้อมเป็นสิ่งที่คุณตั้งไว้ในเปลือกชั่วคราว
Random832

15

หากต้องการยกเลิกตัวแปรสภาพแวดล้อมส่งออก, คุณสามารถใช้คำสั่ง env รันคำสั่งที่กำหนดเป็นอาร์กิวเมนต์และมอบสภาพแวดล้อมที่สะอาดenv -i zshenv-i

ทั้งนี้ขึ้นอยู่กับการกำหนดค่าของคุณคุณอาจจะต้องผนวก-lไปzsh /  bashเพื่อโหลดของคุณ.profileและคุณยังอาจต้อง "บูต" สภาพแวดล้อมของคุณด้วย$HOMEเพื่อให้เปลือกรู้ที่จะหาไฟล์ที่เริ่มต้นของคุณ ทั้งหมดนี้ดูเหมือนว่า:

env -i HOME="$HOME" zsh -l

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