Ich arbeite in einer relativ heterogenen Umgebung, in der ich möglicherweise verschiedene Versionen von Bash auf verschiedenen HPC-Knoten, VMs oder meiner persönlichen Workstation ausführe. Da ich meine Anmeldeskripte in ein Git-Repo eingefügt habe, möchte ich dasselbe (ish) .bashrcauf der ganzen Linie verwenden, ohne viel Unordnung vom Typ "Wenn dieser Host, dann ...".
Ich mag das Standardverhalten von Bash ≤ 4.1, das cd $SOMEPATHsich cd /the/actual/pathbeim Drücken der TabTaste erweitert. In Bash 4.2 und höher müssten Sie shopt -s direxpanddieses Verhalten erneut aktivieren, und das wurde erst in 4.2.29 verfügbar . Dies ist jedoch nur ein Beispiel; Eine andere, möglicherweise verwandte shoptOption complete_fullquote(obwohl ich nicht genau weiß , was sie tut) hat möglicherweise auch das Standardverhalten in Version 4.2 geändert.
Jedoch direxpandwird nicht von früheren Versionen von Bash erkannt, und wenn ich versuche, shopt -s direxpandin meinem .bashrc, dass die Ergebnisse in einer Fehlermeldung an die Konsole jedes Mal gedruckt wird , ich melden Sie sich an , um einen Knoten mit einem älteren Bash:
-bash: shopt: direxpand: invalid shell option name
Ich möchte eine Bedingung umschließen shop -s direxpand, um diese Option auf Bash> 4.1 auf robuste Weise zu aktivieren, ohne die älteren Versionen von Bash zu scheuern ( dh nicht nur die Fehlerausgabe an umzuleiten /dev/null).
.bashrc. Ich wollte immer noch eine Aufzeichnung darüber, wie ich $BASH_VERSINFOdie Haupt- / Nebenversion der laufenden Shell für meine eigene Erbauung abfragen kann, weshalb ich meine eigene Antwort fertiggestellt habe. :)