我想使用 bashCDPATH
指向我经常访问的目录的符号链接目录。但是,做:
CDPATH="~/symlinks"
如果两者都存在,则导致cd SUBDIR
停止工作;目录优先于当前工作目录。./SUBDIR
~/symlinks/SUBDIR
CDPATH
我试图通过使用以下方法来解决此问题:
CDPATH=".:~/symlinks"
这确实解决了优先级问题,但现在cd
访问子目录总是打印其完整路径:
$ pwd
/foo/bar
$ cd baz
/foo/bar/baz
这有点烦人。我知道我可以通过执行来抑制所有cd
输出alias cd='> /dev/null cd'
,但我确实喜欢为其他CDPATH
条目打印的路径(或执行时cd -
)。有什么更好的我可以做的吗?
两条线索:
如果
CDPATH
不存在或为空字符串,则cd SUBDIR
工作正常并且不会打印额外的喷出。bash 联机帮助页说:
联机帮助页似乎过于简单化:显然空目录名(即空字符串)与since生成额外输出但不完全相同。但是,由于 null 目录在 中是合法的,并且由于 null 目录不会生成额外的输出,因此我们可以使用:
.
CDPATH=.
CDPATH=
CDPATH
测试(使用 bash 4.4.12)确认其行为符合预期:
cd SUBDIR
更改为./SUBDIR
而不是更改为~/symlinks/SUBDIR
并且不打印任何额外的溢出。