Bashrc saya. Memiliki beberapa kode yang berulang sehingga saya menggunakan fungsi untuk menyederhanakannya
do_stuff() {
local version=$1
export FOO_${version}_X="17"
export FOO_${version}_Y="42"
}
do_stuff '5.1'
do_stuff '5.2'
Namun, sekarang ketika saya menggunakan shell saya, nama "do_stuff" ada di dalam ruang lingkup sehingga saya bisa melengkapi dan menjalankan fungsi itu (berpotensi mengacaukan variabel lingkungan saya). Apakah ada cara untuk membuat "do_stuff" hanya terlihat di dalam .bashrc?
()
untuk membuat subkulit. Kemungkinan lain untuk kasus-kasus sederhana adalah menggunakanfor version in 5.1 5.2
loop, meskipun ini memungkinkanversion
melarikan diri.Jawaban:
Gunakan
unset
sebagai baris terakhir di.bashrc
:akan menghapus / membatalkan fungsi
do_stuff
.Untuk menghapus / menghapus variabel, jalankan variabel sebagai berikut:
sumber
if type do_stuff >/dev/null 2>&1; then echo "exists"; else echo "dont"; fi
.do_stuff
digunakan di dalam fungsi lain. Ketika Anda memanggil fungsi itu, Anda akan mendapatkannyabash: do_stuff: command not found
. Saya tahu ini bukan kasus yang tepat yang dibicarakan oleh op, tetapi perlu ditunjukkan.Opsi lainnya adalah menggunakan garis bawah seperti dalam bahasa skrip lain untuk menunjukkan Anda tidak bermaksud agar fungsi ini menjadi publik. Kemungkinan Anda mengetik _do_foo cukup kecil dan juga tidak akan bertentangan dengan orang lain.
sumber
Satu-satunya solusi yang bisa saya pikirkan adalah menggarisbawahi dan memberinya nama yang cukup unik, bahkan mungkin menamainya dengan titik-titik seperti bahasa fancypants ( tapi ini tidak akan bekerja di kamu dulu
sh
).Heck, ini tidak akan memiliki konflik:
sumber
Seperti yang disarankan dalam komentar, Anda dapat menggunakan subkulit:
Kami membuat skrip lain di atas output standar subkulit untuk satu-satunya efek samping yang kami inginkan (menggunakan
here
dokumen<<SIDE
). Lalu kami sumber dengan.
.Kekuatan 'mise en abime' in
sh
adalah sumber keajaiban yang menakutkan.sumber