用作目录的符号链接

symbolic links used as directory

clones 是一个 link

nrolland at mactoasty in ~
$ la clones
lrwxr-xr-x  1 nrolland  staff    11B Oct  5 16:37 clones -> Sync/clones

来自子目录

nrolland at mactoasty in ~/clones/monoidAsComputation/app

$ ls ../../../

列出~/Sync中的所有文件

而这列出了 ~

中的所有文件
cd ../../../; ls

如果我尝试将符号 link 指向上面的位置,尽管我可以 cd 指向相对位置

nrolland at mactoasty in ~/clones/monoidAsComputation/app
$ ln -s ../../../.emacs.d/reveal.js

而这会,因为 lnclones 符号 link 扩展为其定义......

nrolland at mactoasty in ~/clones/monoidAsComputation/app
$ ln -s ../../../../.emacs.d/reveal.js

有什么方法可以恢复正常的参照透明性,或者至少恢复 cdln 之间的相同行为?


我在 macOS 上使用 zsh。我会尝试使用其他 shell

不确定 zsh,但以下内容适用于 bash

要获得与 ln(以及任何其他命令)相同的行为,您可以在 bash 中使用 cd -P。在您的示例中,您应该看到:

# nrolland at mactoasty in ~/clones/monoidAsComputation/app
cd -P ../../..; ls

列出 ~/Sync 中的文件,与 ls ../../../ 相同。您可以使用简单的 cd ../../.. 通过别名获得此行为:

alias cd='cd -P'

有关详细信息,请参阅 this answer