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) .bashrcsu 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 $SOMEPATHin cd /the/actual/pathquando si preme il Tabtasto. In Bash 4.2 e versioni successive, è necessario shopt -s direxpandriattivare questo comportamento e che non sarà disponibile fino al 4.2.29 . Questo è solo un esempio, però; un'altra shoptopzione , probabilmente correlata , complete_fullquote(anche se non so esattamente cosa faccia) potrebbe anche aver cambiato il comportamento predefinito alla v4.2.
Tuttavia, direxpandnon è riconosciuto dalle versioni precedenti di Bash, e se provo a shopt -s direxpandnel 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 direxpandper 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_VERSINFOper interrogare la versione maggiore / minore della shell in esecuzione, per la mia edificazione, motivo per cui ho finito di pubblicare la mia risposta. :)