Saya bekerja di lingkungan yang relatif heterogen di mana saya dapat menjalankan versi Bash yang berbeda pada node HPC, VM, atau stasiun kerja pribadi saya yang berbeda. Karena saya meletakkan skrip login saya di repo Git, saya ingin menggunakan (ish) yang sama .bashrc
di seluruh papan, tanpa banyak "jika host ini, maka ..." - ketik kekacauan.
Aku seperti perilaku default Bash ≤ 4.1 yang mengembang cd $SOMEPATH
ke cd /the/actual/path
saat menekan Tabtombol. Di Bash 4.2 dan di atasnya, Anda harus shopt -s direxpand
mengaktifkan kembali perilaku ini, dan itu tidak tersedia hingga 4.2.29 . Ini hanyalah satu contoh; shopt
opsi lain yang mungkin terkait , complete_fullquote
(meskipun saya tidak tahu persis apa yang dilakukannya) mungkin juga telah mengubah perilaku default di v4.2.
Namun, direxpand
tidak dikenali oleh versi Bash sebelumnya, dan jika saya coba shopt -s direxpand
di Bash saya .bashrc
, itu menghasilkan pesan kesalahan yang dicetak ke konsol setiap kali saya masuk ke sebuah simpul dengan Bash yang lebih lama:
-bash: shopt: direxpand: invalid shell option name
Apa yang ingin saya lakukan adalah membungkus kondisional shop -s direxpand
untuk mengaktifkan opsi itu pada Bash> 4.1 dengan cara yang kuat, tanpa merusak versi Bash yang lebih lama ( yaitu , tidak hanya mengarahkan output kesalahan ke /dev/null
).
.bashrc
. Saya masih menginginkan catatan tentang bagaimana menggunakannya $BASH_VERSINFO
untuk menginterogasi versi utama / minor dari shell yang sedang berjalan, untuk perbaikan saya sendiri, itulah sebabnya saya selesai memposting jawaban saya sendiri. :)