Lavoro in un ambiente relativamente eterogeneo in cui potrei eseguire diverse versioni di Bash su diversi nodi HPC, VM o workstation personali. Dato che ho inserito i miei script di accesso in un repository Git, mi piacerebbe usare lo stesso (ish) .bashrc
su tutta la linea, senza un sacco di disordine di tipo "if this host, then ...".
Mi piace il comportamento predefinito di Bash ≤ 4.1 che si espande cd $SOMEPATH
in cd /the/actual/path
quando si preme il Tabtasto. In Bash 4.2 e versioni successive, è necessario shopt -s direxpand
riattivare questo comportamento e che non sarà disponibile fino al 4.2.29 . Questo è solo un esempio, però; un'altra shopt
opzione , probabilmente correlata , complete_fullquote
(anche se non so esattamente cosa faccia) potrebbe anche aver cambiato il comportamento predefinito alla v4.2.
Tuttavia, direxpand
non è riconosciuto dalle versioni precedenti di Bash, e se provo a shopt -s direxpand
nel mio .bashrc
, che si traduce in un messaggio di errore in fase di stampa per la console ogni volta che accedo ad un nodo con un vecchio Bash:
-bash: shopt: direxpand: invalid shell option name
Quello che mi piacerebbe fare è avvolgere un condizionale shop -s direxpand
per abilitare quell'opzione su Bash> 4.1 in modo robusto, senza sfregare le versioni precedenti di Bash ( cioè , non solo reindirizzare l'output dell'errore a /dev/null
).
.bashrc
. Volevo ancora un record su come utilizzare $BASH_VERSINFO
per interrogare la versione maggiore / minore della shell in esecuzione, per la mia edificazione, motivo per cui ho finito di pubblicare la mia risposta. :)