Je travaille dans un environnement relativement hétérogène où je peux exécuter différentes versions de Bash sur différents nœuds HPC, machines virtuelles ou mon poste de travail personnel. Parce que je mets mes scripts de connexion dans un référentiel Git, je voudrais utiliser le même (ish) à .bashrc
tous les niveaux, sans beaucoup de "si cet hôte, alors ..." - type désordre.
Je comme le comportement par défaut de Bash ≤ 4.1 qui se développe cd $SOMEPATH
en cd /the/actual/path
lorsque vous appuyez sur la Tabtouche. Dans Bash 4.2 et supérieur, vous devrez shopt -s direxpand
réactiver ce comportement, et ce n'est devenu disponible que le 4.2.29 . Ce n'est qu'un exemple, cependant; une autre shopt
option , éventuellement liée , complete_fullquote
(bien que je ne sache pas exactement ce qu'elle fait) peut également avoir changé le comportement par défaut de la v4.2.
Cependant, direxpand
n'est pas reconnu par les versions antérieures de Bash, et si je tente de shopt -s direxpand
mon .bashrc
, qui se traduit par un message d'erreur en cours d' impression à la console à chaque fois que je me connecte à un nœud avec un Bash plus:
-bash: shopt: direxpand: invalid shell option name
Ce que j'aimerais faire, c'est encapsuler un conditionnel shop -s direxpand
pour activer cette option sur Bash> 4.1 de manière robuste, sans frotter les anciennes versions de Bash ( c'est -à- dire , pas seulement rediriger la sortie d'erreur vers /dev/null
).
.bashrc
. Je voulais toujours un enregistrement de la façon d'utiliser $BASH_VERSINFO
pour interroger la version majeure / mineure du shell en cours d'exécution, pour ma propre édification, c'est pourquoi j'ai fini de poster ma propre réponse. :)