在 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
在不带-s
or 的情况下调用-u
:
if shopt autocd >/dev/null 2>/dev/null; then …
答案3
一种简单的方法是检查操作系统名称并采取相应措施。我不知道uname
OSX 上会返回什么,但大概会有所不同。因此,你可以这样做:
[[ $(uname) = Linux ]] && shopt -s autocd
也就是说,您确定需要这样做吗? OSX 默认运行登录 shell,~/.bashrc
除非您修改了它~/.profile
以获取它,否则它会被忽略。因此,如果你的 中有一些东西~/.bashrc
,它无论如何都只能在 Linux 上运行。