Symlink

執行符號連結產生的結果與執行它指向的文件不同

  • May 5, 2020

上下文

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-cliscilab-adv-cli都是指向 的符號連結scilab。執行scilab-cliscilab-adv-cliscilab產生不同的結果(見下面的 gif)

在此處輸入圖像描述

問題

指向執行檔**(B)的符號連結(A)不應該執行(B)**嗎?

在上述場景中,scilab-cliandscilab-adv-cli將是**(A)並且scilab將是(B)**。

執行指向執行檔的符號連結確實會執行執行檔,但有一個重要區別:給新程序的第一個參數(在這種情況下)儲存給定的命令,給出符號連結的名稱,而不是目標執行檔的名稱。這允許程序根據呼叫方式實現不同的行為。

可能安裝在您的系統上的一個常見實例是apropos:它通常(至少在 Linux 系統上)是指向 的符號連結whatis,但是這兩個命令的行為不同。

在您的情況下,當scilab執行為時scilab-cli,它會顯示其文本模式界面;當它執行時scilab(就像您的realpath方法一樣),它會啟動它的 GUI。

引用自:https://unix.stackexchange.com/questions/584654