Saya mencoba memuat ruang lingkup variabel ke shell, dan tidak membuat anak melihatnya, di zsh. Misalnya, saya mengetik ini dalam .zshrc:
GREP_OPTIONS=--color=always
Tetapi jika saya menjalankan skrip shell dengan yang berikut:
#!/bin/bash
echo $GREP_OPTIONS
Outputnya adalah:
--color=always
sementara saya ingin menjadi nol (skrip shell di atas seharusnya tidak melihat variabel GREP_OPTIONS sama sekali).
Dalam bash, dapat dikatakan:, export -n GREP_OPTIONS=--color=always
yang akan mencegah hal ini terjadi. Bagaimana saya melakukannya di zsh?
shell-script
zsh
environment-variables
PonyEars
sumber
sumber
export -n
cukup hapus ekspor variabel yang diekspor.Jawaban:
export
di zsh adalah singkatan untuktypeset -gx
, di mana atributg
berarti "global" (sebagai lawan dari fungsi lokal) dan atributx
berarti "diekspor" (yaitu di lingkungan). Jadi:Ini juga berfungsi di ksh dan bash.
Jika Anda tidak pernah mengekspor
GREP_OPTIONS
, Anda tidak perlu mengekspornya.Anda juga dapat menggunakan cara tidak langsung dan portabel: membatalkan pengaturan suatu variabel akan menghapusnya. Di ksh / bash / zsh, ini tidak berfungsi jika variabel hanya-baca.
sumber
env -u GREP_OPTIONS your-script
dengan beberapaenv
implementasi (shell apa saja). Atau(unset GREP_OPTIONS; exec your-script)
export_all
(-a
)? Tetapi bahkan kemudian tidaktypeset +x GREP_OPTIONS
akan mengekspor variabel. Jika Anda tidak dapat menemukan apa yang salah, coba pencarian biner: buat cadangan Anda.zshrc
, hapus paruh kedua, lihat apakah masalahnya masih muncul, lalu tambahkan kuartal ketiga atau kurangi ke kuartal pertama dan ulangi.Anda bisa menggunakan fungsi anonim untuk memberikan cakupan variabel. Dari
man zshall
:Tapi selain itu - jika Anda tidak menggunakan
export
di Anda.zshrc
sama sekali, variabel hanya harus terlihat dalam sesi interaktif Anda saat ini, dan itu tidak boleh diekspor ke subkulit.Seperti Terdon dijelaskan dalam komentarnya:
export -n
dibash
hanya menyebabkan "ekspor" properti untuk dihapus dari variabel, sehingga menggunakanexport -n GREP_OPTIONS=--color=always
setara dengan tidak menggunakan ekspor sama sekali -GREP_OPTIONS=--color=always
.Dengan kata lain, untuk mendapatkan perilaku yang diinginkan, jangan gunakan
export
. Sebaliknya, dalam diri Anda.zshrc
, Anda seharusnya memilikinyaItu akan membuat variabel tersedia untuk semua shell (interaktif, non-login) yang Anda jalankan, seperti yang Anda inginkan, tetapi tidak akan diekspor ke shell anak.
sumber