我想使用 bash 指向CDPATH
我经常访问的目录的符号链接目录。然而,做:
CDPATH="~/symlinks"
如果两者都存在,则导致cd SUBDIR
停止工作;目录优先于当前工作目录。./SUBDIR
~/symlinks/SUBDIR
CDPATH
我尝试通过使用以下方法来解决此问题:
CDPATH=".:~/symlinks"
这确实解决了优先级问题,但现在cd
ing 到子目录总是打印其完整路径:
$ pwd
/foo/bar
$ cd baz
/foo/bar/baz
这有点烦人。我知道我可以通过执行以下操作来抑制所有cd
输出alias cd='> /dev/null cd'
,但我确实喜欢为其他条目打印路径CDPATH
(或在执行 时cd -
)。我还能做些什么更好的事情吗?
答案1
两条线索:
如果
CDPATH
不存在或为空字符串,则cd SUBDIR
工作正常并且不会打印额外的溢出。bash 手册页说:
该变量
CDPATH
定义包含以下内容的目录的搜索路径dir
:CDPATH
搜索中的每个目录名称dir
。中的备用目录名称CDPATH
由冒号 ( ) 分隔:
。空目录名CDPATH
与当前目录相同,即“.”。
手册页似乎过于简单化:显然,空目录名称(即空字符串)是不是.
与CDPATH=.
生成额外输出但CDPATH=
不生成额外输出完全相同。但是,由于空目录在 中是合法的CDPATH
,并且空目录不会生成额外的输出,因此我们可以使用:
# The first entry is intentionally an empty string.
CDPATH=":~/symlinks"
测试(使用 bash 4.4.12)确认其行为符合预期:cd SUBDIR
更改为./SUBDIR
而不是 to~/symlinks/SUBDIR
并执行不是打印任何额外的喷出物。