Como posso fazer com que minha chamada .bashrc para shopt -s autocd dependa da versão bash?

5

No Ubuntu eu gosto de ter

shopt -s autocd

no meu arquivo .bashrc para CD'ing automático com digitação de 'cd', ou seja, apenas digite o nome do diretório (e provavelmente use a conclusão de tabulação também) e pressione return e seja cd'd para o diretório se ele existir. / p>

No OSX, isso não é válido no meu .bashrc

Como posso fazer um 'depende' disso? Para que eu possa compartilhar e manter apenas um .bashrc entre os dois sistemas operacionais?

Eu sei de um arquivo que posso fazer coisas como:

if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

e para uma aplicação como o tmux que depende da tela que posso fazer

if [[ ! $TERM =~ screen ]]; then
  if [ -n "$(type -P tmux)" ]; then
    exec tmux
  fi  
fi

mas eu posso fazer esse tipo de coisa para saber se posso fazer shopt -s autocd ?

    
por Michael Durrant 12.04.2014 / 20:16

3 respostas

3

autocd foi introduzido no bash com a versão 4 . Assim, uma solução geral de plataforma cruzada deve ser:

[ "${BASH_VERSINFO[0]}" -ge 4 ] && shopt -s autocd

${BASH_VERSINFO[0]} é a versão principal do bash. A versão secundária, caso você precise, é ${BASH_VERSINFO[1]} . Veja man bash para mais sobre BASH_VERSINFO .

    
por 12.04.2014 / 21:35
1

É tão simples quanto

shopt -s autocd 2>/dev/null

Se você deseja ver se uma opção está disponível, mas não altera seu valor, chame shopt sem -s ou -u :

if shopt autocd >/dev/null 2>/dev/null; then …
    
por 13.04.2014 / 01:58
0

Uma abordagem simples seria verificar o nome do SO e agir de acordo. Eu não sei o que uname retornará no OSX, mas presumivelmente será diferente. Você pode, portanto, fazer algo assim:

 [[ $(uname) = Linux ]] &&  shopt -s autocd

Dito isto, você tem certeza de que precisa fazer isso? O OSX executa shells de login por padrão e o ~/.bashrc é ignorado, a menos que você tenha modificado seu ~/.profile para obtê-lo. Portanto, se você tiver algo em seu ~/.bashrc , ele só será executado no Linux de qualquer maneira.

    
por 12.04.2014 / 21:15