我在相对异构的环境中工作,其中我可能在不同的HPC节点,VM或我的个人工作站上运行不同版本的Bash。因为我将登录脚本放在了Git仓库中,所以我想全面使用相同.bashrc的命令,而不会出现很多“如果是此主机,则...”类型的混乱情况。
我喜欢 Bash≤4.1的默认行为,该行为会在按下键时扩展cd $SOMEPATH为。在bash 4.2及以上,则需要重新启用此行为,而这并没有变得可用,直到4.2.29。不过,这只是一个例子。另一个可能相关的选项(尽管我不确切知道它的作用)也可能更改了v4.2的默认行为。cd /the/actual/pathTabshopt -s direxpandshoptcomplete_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的主要/次要版本,以达到我自己的目的,这就是为什么我完成发布自己的答案的原因。:)