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 .bashrcdi seluruh papan, tanpa banyak "jika host ini, maka ..." - ketik kekacauan.
Aku seperti perilaku default Bash ≤ 4.1 yang mengembang cd $SOMEPATHke cd /the/actual/pathsaat menekan Tabtombol. Di Bash 4.2 dan di atasnya, Anda harus shopt -s direxpandmengaktifkan kembali perilaku ini, dan itu tidak tersedia hingga 4.2.29 . Ini hanyalah satu contoh; shoptopsi lain yang mungkin terkait , complete_fullquote(meskipun saya tidak tahu persis apa yang dilakukannya) mungkin juga telah mengubah perilaku default di v4.2.
Namun, direxpandtidak dikenali oleh versi Bash sebelumnya, dan jika saya coba shopt -s direxpanddi 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 direxpanduntuk 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_VERSINFOuntuk menginterogasi versi utama / minor dari shell yang sedang berjalan, untuk perbaikan saya sendiri, itulah sebabnya saya selesai memposting jawaban saya sendiri. :)