Trabalho em um ambiente relativamente heterogêneo, onde posso estar executando versões diferentes do Bash em diferentes nós HPC, VMs ou minha estação de trabalho pessoal. Como eu coloquei meus scripts de login em um repositório Git, eu gostaria de usar o mesmo (ish) .bashrc
em geral, sem muitos "se este host, então ..." - confusão do tipo.
I como o comportamento padrão do Bash ≤ 4.1 que se expande cd $SOMEPATH
em cd /the/actual/path
quando pressionando a Tabtecla. No Bash 4.2 e acima, você precisaria shopt -s direxpand
reativar esse comportamento, que não estava disponível até o 4.2.29 . Este é apenas um exemplo; outra shopt
opção possivelmente relacionada complete_fullquote
(embora eu não saiba exatamente o que faz) também pode ter mudado o comportamento padrão na v4.2.
No entanto, direxpand
não é reconhecido pelas versões anteriores do Bash e, se eu tentar shopt -s direxpand
no meu .bashrc
, isso resulta em uma mensagem de erro sendo impressa no console toda vez que eu faço logon em um nó com um Bash mais antigo:
-bash: shopt: direxpand: invalid shell option name
O que eu gostaria de fazer é agrupar uma condição condicional shop -s direxpand
para ativar essa opção no Bash> 4.1 de maneira robusta, sem atrapalhar as versões mais antigas do Bash ( ou seja , não apenas redirecionar a saída de erro para /dev/null
).
.bashrc
. Eu ainda queria um registro de como usar $BASH_VERSINFO
para interrogar a versão principal / secundária do shell em execução, para minha própria edificação, e é por isso que terminei de postar minha própria resposta. :)