如何使 .bashrc 对 shopt -s autocd 的调用取决于 bash 版本?

如何使 .bashrc 对 shopt -s autocd 的调用取决于 bash 版本?

在 Ubuntu 中我喜欢

shopt -s autocd

在我的.bashrc文件中,通过键入“cd”进行自动 CD 操作,即只需键入目录名称(也可能使用制表符补全),然后按回车键并 cd 到该目录(如果存在)。

在 OSX 上,这在我的系统中无效.bashrc

我该如何为此做“取决于”?这样我就可以在两个操作系统之间共享和维护一个 .bashrc 吗?

我知道对于一个文件我可以做类似的事情:

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

对于像 tmux 这样依赖于屏幕的应用程序,我可以这样做

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

但我能做这种事吗?我能做吗shopt -s autocd

答案1

autocd被引入 bash与版本 4。因此,通用的跨平台解决方案应该是:

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

${BASH_VERSINFO[0]}是 bash 的主要版本。如果您需要的话,次要版本是${BASH_VERSINFO[1]}.请参阅man bash参考资料 获取更多信息BASH_VERSINFO

答案2

就这么简单

shopt -s autocd 2>/dev/null

如果您想查看某个选项是否可用但不更改其值,请shopt在不带-sor 的情况下调用-u

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

答案3

一种简单的方法是检查操作系统名称并采取相应措施。我不知道unameOSX 上会返回什么,但大概会有所不同。因此,你可以这样做:

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

也就是说,您确定需要这样做吗? OSX 默认运行登录 shell,~/.bashrc除非您修改了它~/.profile以获取它,否则它会被忽略。因此,如果你的 中有一些东西~/.bashrc,它无论如何都只能在 Linux 上运行。

相关内容