神秘的软链接
某次我注意到如下软链接:
$ ls -l
lrwxrwxrwx 1 root 41 Mar 16 16:20 tlmgr -> ../../texmf-dist/scripts/texlive/tlmgr.pl
$ pwd
/Library/TeX/texbin
我非常奇怪,因为当前目录是 /Library/TeX/texbin,而 tlmgr 的软链接指向 ../../texmf-dist/scripts/texlive/tlmgr.pl,也就是说它应该指向 /Library/texmf-dist/scripts/texlive/tlmgr.pl,但是 Library 目录中并没有 texmf-dist 这个文件夹。
我尝试运行如下命令:
$ pwd
/Library/TeX/texbin
$ cd ../../texmf-dist
$ pwd
/usr/local/texlive/2024/texmf-dist
发现竟然直接跳到了另一个目录。然而如果我分开跳转:
$ pwd
/Library/TeX/texbin
$ cd ../..
$ cd texmf-dist
cd: no such file or directory: texmf-dist
我百思不得姐。问了 ChatGPT,ChatGPT 说是因为我当前在的这个 texbin 目录本身就是一个软链接,指向另一个目录。cd ../../texmf-dist 相当于直接在另一个目录中跳转。而 cd ../.. && cd texmf-dist 则是退出了软链接之后再进行跳转,因此跳转失败。
经过查询,我发现 texbin 确实是一个软链接:
$ ls -l
lrwxr-xr-x 1 root 29 May 13 12:00 texbin -> Distributions/Programs/texbin
可是 tlmgr 的软链接指向的是 ../../texmf-dist/scripts/texlive/tlmgr.pl,从 Distributions/Programs/texbin 目录依然无法跳转到 texmf-dist 目录。
于是我又查了一下 Distributions/Programs/texbin 目录,发现它也是一个软链接:
$ ls -l Distributions/Programs/texbin
lrwxr-xr-x 1 root 39 May 13 12:00 Distributions/Programs/texbin -> ../.DefaultTeX/Contents/Programs/texbin
我继续往下查:
$ ls -l Distributions/Programs/../.DefaultTeX/Contents/Programs/texbin
lrwxr-xr-x 1 root 9 May 13 12:00 Distributions/Programs/../.DefaultTeX/Contents/Programs/texbin -> universal
$ ls -l Distributions/Programs/../.DefaultTeX/Contents/Programs/universal
lrwxr-xr-x 1 root 64 May 13 12:00 Distributions/Programs/../.DefaultTeX/Contents/Programs/universal -> ../../../../../../../usr/local/texlive/2024/bin/universal-darwin
ls -ld Distributions/Programs/../.DefaultTeX/Contents/Programs/../../../../../../../usr/local/texlive/2024/bin/universal-darwin
drwxr-xr-x 495 root 15840 Mar 16 16:21 Distributions/Programs/../.DefaultTeX/Contents/Programs/../../../../../../../usr/local/texlive/2024/bin/universal-darwin
这下终于找到真身了。有点乱,整理一下:
/usr/local/texlive/2024/bin/universal-darwin 就是我们最终进入的目录。
而其中的 tlmgr 指向的 ../../texmf-dist/scripts/texlive/tlmgr.pl,我们也可以正常找到它的位置,位于 /usr/local/texlive/2024/texmf-dist/scripts/texlive/tlmgr.pl,这符合我们的预期。
虽然进入 /Library/TeX/texbin 目录就相当于进入 /usr/local/texlive/2024/bin/universal-darwin 目录,然而当我们使用 pwd 打印当前工作目录时,Shell 并不会告诉我们这一点。Shell 会让我们以为我们就处于 /Library/TeX/texbin 目录(毕竟你进入 .. 目录的话还要退出软链接不是)。

浙公网安备 33010602011771号