我在相对异构的环境中工作,其中我可能在不同的HPC节点,VM或我的个人工作站上运行不同版本的Bash。因为我将登录脚本放在了Git仓库中,所以我想全面使用相同.bashrc
的命令,而不会出现很多“如果是此主机,则...”类型的混乱情况。
我喜欢 Bash≤4.1的默认行为,该行为会在按下键时扩展cd $SOMEPATH
为。在bash 4.2及以上,则需要重新启用此行为,而这并没有变得可用,直到4.2.29。不过,这只是一个例子。另一个可能相关的选项(尽管我不确切知道它的作用)也可能更改了v4.2的默认行为。cd /the/actual/path
Tabshopt -s direxpand
shopt
complete_fullquote
但是,direxpand
早期版本的Bash无法识别该错误,如果我尝试在shopt -s direxpand
中运行.bashrc
,则每次我使用较旧的Bash登录到节点时,都会在控制台上显示一条错误消息:
-bash: shopt: direxpand: invalid shell option name
我想做的是环绕一个条件,shop -s direxpand
以一种健壮的方式在Bash> 4.1上启用该选项,而不会破坏Bash的旧版本(即,不仅仅将错误输出重定向到/dev/null
)。
.bashrc
。我还是想要记录一下如何使用它$BASH_VERSINFO
来询问正在运行的shell的主要/次要版本,以达到我自己的目的,这就是为什么我完成发布自己的答案的原因。:)