¿Cómo puedo hacer que mi llamada .bashrc a shopt -s autocd dependa de la versión bash?

En Ubuntu me gusta tener

shopt -s autocd 

en mi file .bashrc para CD'ing automático con tipear 'cd', es decir, simplemente escriba el nombre del directory (y probablemente también use tabulación) y presione regresar y ser cd'd al directory si existe.

En OSX esto no es válido en mi .bashrc

¿Cómo puedo hacer un 'depende de' para esto? ¿Para poder compartir y mantener solo un .bashrc entre los dos sistemas operativos?

Sé por un file que puedo hacer cosas como:

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

y para una aplicación como tmux que depende de la pantalla que puedo hacer

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

pero puedo hacer esto para saber si puedo hacer shopt -s autocd ?

autocd se introdujo en bash con la versión 4 . Entonces, una solución general multiplataforma debería ser:

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

${BASH_VERSINFO[0]} es la versión principal de bash. La versión menor, si alguna vez la necesita, es ${BASH_VERSINFO[1]} . Vea man bash para más información sobre BASH_VERSINFO .

Es tan simple como

 shopt -s autocd 2>/dev/null 

Si quiere ver si una opción está disponible pero no cambia su valor, llame a shopt sin -s o -u :

 if shopt autocd >/dev/null 2>/dev/null; then … 

Un enfoque simple sería verificar el nombre del sistema operativo y actuar en consecuencia. No sé qué devolverá una vez en OSX pero, presumiblemente, será diferente. Por lo tanto, puedes hacer algo como esto:

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

Dicho eso, ¿estás seguro de que necesitas hacer esto? OSX ejecuta shells de inicio de session de forma pnetworkingeterminada y el ~/.bashrc se ignora a less que haya modificado su ~/.profile para ~/.profile . Por lo tanto, si tiene algo en su ~/.bashrc , solo se ejecutará en Linux de todos modos.