我想使用 bashCDPATH
指向我经常访问的目录的符号链接目录。但是,这样做:
export CDPATH="~/symlinks"
Run Code Online (Sandbox Code Playgroud)
导致cd SUBDIR
停止工作,如果./SUBDIR
和~/symlinks/SUBDIR
同时存在; CDPATH
目录优先于当前工作目录。
我尝试使用以下方法解决此问题:
export CDPATH=".:~/symlinks"
Run Code Online (Sandbox Code Playgroud)
这确实解决了优先级问题,但现在cd
到子目录总是打印其完整路径:
$ pwd
/foo/bar
$ cd baz
/foo/bar/baz
Run Code Online (Sandbox Code Playgroud)
这有点烦人。我知道我可以通过执行来抑制所有cd
输出alias cd='> /dev/null cd'
,但我确实喜欢为其他CDPATH
条目(或执行cd -
)打印的路径。有什么我可以做的更好的吗?
两条线索:
如果CDPATH
不存在或为空字符串,则cd SUBDIR
工作正常并且不会打印额外的 spew。
bash 联机帮助页说:
可变
CDPATH
限定用于包含该目录的搜索路径dir
:在每个目录名称CDPATH
中搜索dir
。中的替代目录名称CDPATH
由冒号 (:
)分隔。inCDPATH
中的空目录名与当前目录相同,即“.”。
该手册页似乎过于简单化了:明明一个空目录名(即空字符串)是不完全一样的.
,因为CDPATH=.
产生额外的输出,但CDPATH=
没有。但是,由于空目录在 中是合法的CDPATH
,并且由于空目录不会生成额外的输出,因此我们可以使用:
# The first entry is intentionally an empty string.
export CDPATH=":~/symlinks"
Run Code Online (Sandbox Code Playgroud)
测试(使用bash 4.4.12)证实,表现为期望:cd SUBDIR
更改./SUBDIR
,而不是到~/symlinks/SUBDIR
和没有不打印任何多余的渗出。