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) .bashrc
auf der ganzen Linie verwenden, ohne viel Unordnung vom Typ "Wenn dieser Host, dann ...".
Ich mag das Standardverhalten von Bash ≤ 4.1, das cd $SOMEPATH
sich cd /the/actual/path
beim Drücken der TabTaste erweitert. In Bash 4.2 und höher müssten Sie shopt -s direxpand
dieses Verhalten erneut aktivieren, und das wurde erst in 4.2.29 verfügbar . Dies ist jedoch nur ein Beispiel; Eine andere, möglicherweise verwandte shopt
Option complete_fullquote
(obwohl ich nicht genau weiß , was sie tut) hat möglicherweise auch das Standardverhalten in Version 4.2 geändert.
Jedoch direxpand
wird nicht von früheren Versionen von Bash erkannt, und wenn ich versuche, shopt -s direxpand
in 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_VERSINFO
die Haupt- / Nebenversion der laufenden Shell für meine eigene Erbauung abfragen kann, weshalb ich meine eigene Antwort fertiggestellt habe. :)