Bagaimana cara mereset lingkungan shell?

25

Masalah ini telah mengganggu saya untuk sementara waktu, dan meskipun saya pikir saya sudah menemukan jawaban saya melalui EnvWatcher , sayangnya itu hanya bekerja di Bash. Dan saya menggunakan zsh.

Saya ingin meniru hal-hal yang dilakukan env-watcher, pada tingkat yang lebih rendah mungkin, tetapi saya perlu tahu apakah ada perintah yang dapat saya gunakan untuk mereset shell ke tahap startup yang bersih.

Sebagai contoh, saya ingin memiliki alur kerja berikut.

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

Apakah ada kemungkinan seperti itu, atau apakah saya mengejar kupu-kupu?

mhitza
sumber

Jawaban:

32

Anda bisa saja exec zsh, yang akan memberi Anda zsh segar dan menjalankan kembali fungsi init. Perhatikan bahwa Anda harus exec zsh -lmasuk untuk zsh agar dapat mempertahankan status "login shell" -nya. Saya tidak tahu seberapa baik mempertahankan sejarah perintah (tampaknya bekerja untuk saya, tetapi jika Anda menggunakan beberapa shell di terminal yang berbeda, Anda mungkin mendapatkan 'crosstalk' antara sejarah dua shell ')

Random832
sumber
4
Itu tidak akan membatalkan variabel lingkungan yang diekspor, bukan? (Meskipun semua yang diatur oleh file init Anda akan diatur ulang.)
cjm
Mungkin tidak. Saya tidak mempertimbangkan aspek itu karena saya tidak memikirkan variabel lingkungan sebagai sesuatu yang Anda atur sementara di shell.
Random832
15

Untuk membatalkan variabel lingkungan yang diekspor, Anda dapat menggunakan envperintah env -i zsh. envmenjalankan perintah yang diberikan sebagai argumen, dan -imemberinya lingkungan yang bersih.

Tergantung pada konfigurasi Anda, Anda mungkin perlu menambahkan -lke zsh /  bashdalam rangka untuk memuat Anda .profile, dan Anda juga mungkin perlu untuk "bootstrap" lingkungan Anda dengan $HOMEsehingga shell tahu di mana untuk menemukan file startup Anda. Secara keseluruhan, ini terlihat seperti:

env -i HOME="$HOME" zsh -l
Chris
sumber
1
Anda mungkin perlu beberapa yang lain, seperti TERMdan DISPLAY.
G-Man Mengatakan 'Reinstate Monica'