Symlink
執行符號連結產生的結果與執行它指向的文件不同
上下文
我
scilab-6.1.0.bin.linux-x86_64.tar.gz
從“Scilab”官方網站下載,因為我希望能夠使用提供的工具。在
bin
下載文件的目錄中,我有以下文件$ ls -l | cut -d ' ' -f 5- 1713591 Feb 25 05:27 modelicac 2057719 Feb 25 05:27 modelicat 44563 Feb 25 05:27 scilab 6 Feb 25 05:27 scilab-adv-cli -> scilab 24741 Feb 25 05:27 scilab-bin 6 Feb 25 05:27 scilab-cli -> scilab 20725 Feb 25 05:27 scilab-cli-bin 44563 Feb 25 05:27 scinotes 44563 Feb 25 05:27 xcos 675942 Feb 25 05:27 XML2Modelica $ test -L scilab-adv-cli && test -L scilab-cli && echo $? 0
正如我們所見,
scilab-cli
和scilab-adv-cli
都是指向 的符號連結scilab
。執行scilab-cli
,scilab-adv-cli
並scilab
產生不同的結果(見下面的 gif)問題
指向執行檔**(B)的符號連結(A)不應該執行(B)**嗎?
在上述場景中,
scilab-cli
andscilab-adv-cli
將是**(A)並且scilab
將是(B)**。
執行指向執行檔的符號連結確實會執行執行檔,但有一個重要區別:給新程序的第一個參數(在這種情況下)儲存給定的命令,給出符號連結的名稱,而不是目標執行檔的名稱。這允許程序根據呼叫方式實現不同的行為。
可能安裝在您的系統上的一個常見實例是
apropos
:它通常(至少在 Linux 系統上)是指向 的符號連結whatis
,但是這兩個命令的行為不同。在您的情況下,當
scilab
執行為時scilab-cli
,它會顯示其文本模式界面;當它執行時scilab
(就像您的realpath
方法一樣),它會啟動它的 GUI。