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 .bashrccał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 $SOMEPATHsię cd /the/actual/pathpo naciśnięciu Tabklawisza. W wersji Bash 4.2 i nowszych konieczne byłoby shopt -s direxpandponowne 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 shoptopcja complete_fullquote(chociaż nie wiem dokładnie, co to robi) mogła również zmienić domyślne zachowanie w wersji 4.2.
Jednak direxpandnie jest rozpoznawane przez wcześniejsze wersje Basha, a jeśli próbuję shopt -s direxpandw 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 direxpandaby 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_VERSINFOdo 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ź. :)