Apa cara terbaik untuk mengeksekusi skrip saat masuk ke direktori?
Saat saya pindah ke direktori baru, saya ingin bash menjalankan skrip projectSettings.bash seperti halnya RVM.
Jawaban yang Diterima:
Anda dapat membuat cd
sebuah fungsi (dan pop
dan pushd
), dan membuatnya mendeteksi jika Anda memasuki direktori tertentu.
cd () { builtin cd "[email protected]" && chpwd; }
pushd () { builtin pushd "[email protected]" && chpwd; }
popd () { builtin popd "[email protected]" && chpwd; }
unset_all_project_settings () {
# do whatever it takes to undo the effect of projectSettings.bash,
# e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
case $PWD in
/some/directory|/some/other/directory) . ./projectSettings.bash;;
*) unset_all_project_settings;;
esac
}
Jangan lakukan ini di direktori yang belum Anda daftar putih, karena akan sangat mudah bagi seseorang untuk mengelabui Anda agar menjalankan kode arbitrer — mengirimi Anda arsip, jadi Anda unzip, ubah ke direktori yang dibuatnya, dan Anda' sekarang telah menjalankan kode penyerang.
Saya tidak merekomendasikan pendekatan ini, karena itu berarti skrip akan dieksekusi bahkan jika Anda memasuki direktori itu karena alasan tertentu yang tidak terkait dengan pengerjaan proyek. Saya sarankan memiliki fungsi khusus yang mengubah direktori proyek dan sumber skrip pengaturan.
myproj () {
cd /some/directory && . ./projectSettings.bash
}