Trabajo en un entorno relativamente heterogéneo donde puedo ejecutar diferentes versiones de Bash en diferentes nodos HPC, máquinas virtuales o mi estación de trabajo personal. Debido a que puse mis scripts de inicio de sesión en un repositorio de Git, me gustaría usar el mismo (ish) en .bashrc
todos los ámbitos, sin un montón de "si este host, entonces ..." - escribe desorden.
Yo al igual que el comportamiento predeterminado de Bash ≤ 4.1 que se expande cd $SOMEPATH
en cd /the/actual/path
al pulsar la Tabtecla. En Bash 4.2 y superior, necesitaría shopt -s direxpand
volver a habilitar este comportamiento, y eso no estuvo disponible hasta 4.2.29 . Sin embargo, este es solo un ejemplo; Otra shopt
opción , posiblemente relacionada , complete_fullquote
(aunque no sé exactamente qué hace) también puede haber cambiado el comportamiento predeterminado en v4.2.
Sin embargo, direxpand
las versiones anteriores de Bash no lo reconocen, y si lo intento shopt -s direxpand
en mi .bashrc
, eso genera un mensaje de error que se imprime en la consola cada vez que inicio sesión en un nodo con un Bash anterior:
-bash: shopt: direxpand: invalid shell option name
Lo que me gustaría hacer es envolver un condicional shop -s direxpand
para habilitar esa opción en Bash> 4.1 de una manera robusta, sin irritar las versiones anteriores de Bash ( es decir , no solo redirigiendo la salida del error /dev/null
).
.bashrc
. Todavía quería un registro de cómo usar $BASH_VERSINFO
para interrogar la versión mayor / menor del shell en ejecución, para mi propia edificación, razón por la cual terminé de publicar mi propia respuesta. :)