某次我注意到如下軟連結:
$ pwd
/Library/TeX/texbin
$ ls -l
lrwxrwxrwx 1 root 41 Mar 16 16:20 tlmgr -> ../../texmf-dist/scripts/texlive/tlmgr.pl
我非常奇怪,因為當前目錄是 /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
目錄(畢竟你進入 ..
目錄的話還要退出軟連結不是)。