Pracuję w stosunkowo heterogenicznym środowisku, w którym mogę uruchamiać różne wersje Bash na różnych węzłach HPC, maszynach wirtualnych lub mojej osobistej stacji roboczej. Ponieważ umieściłem swoje skrypty logowania w repozytorium Git, chciałbym używać tego samego (ish) na .bashrc
całym forum, bez zbyt wielu „jeśli ten host, to ...” - niechlujny typ.
Podoba mi się domyślne zachowanie Bash ≤ 4.1, które rozwija cd $SOMEPATH
się cd /the/actual/path
po naciśnięciu Tabklawisza. W wersji Bash 4.2 i nowszych konieczne byłoby shopt -s direxpand
ponowne włączenie tego zachowania, które stało się dostępne dopiero w wersji 4.2.29 . To tylko jeden przykład; inna, prawdopodobnie powiązana shopt
opcja complete_fullquote
(chociaż nie wiem dokładnie, co to robi) mogła również zmienić domyślne zachowanie w wersji 4.2.
Jednak direxpand
nie jest rozpoznawane przez wcześniejsze wersje Basha, a jeśli próbuję shopt -s direxpand
w moim .bashrc
, który powoduje wyświetlenie komunikatu o błędzie, który jest drukowany na konsoli przy każdym logowaniu do węzła ze starszą Bash:
-bash: shopt: direxpand: invalid shell option name
Chciałbym owinąć warunek, shop -s direxpand
aby włączyć tę opcję w wersji Bash> 4.1 w niezawodny sposób, bez przecierania starszych wersji Bash ( tj. Nie tylko przekierowując wyjście błędu /dev/null
).
.bashrc
. Wciąż potrzebowałem zapisu, w jaki sposób użyć $BASH_VERSINFO
do przesłuchania głównej / podrzędnej wersji działającej powłoki, dla mojej własnej edycji, dlatego skończyłem publikować własną odpowiedź. :)