Bash

ln -s 相對於 pwd 的路徑

  • September 3, 2019

我正在嘗試創建一堆符號連結,但我無法弄清楚為什麼這會起作用

ln -s /Users/niels/something/foo ~/bin/foo_link

而這

cd /Users/niels/something
ln -s foo ~/bin/foo_link

不是。

我相信它與foo_link連結到 foo in/Users/niels/bin而不是/Users/niels/something

所以問題是,我如何創建一個指向絕對路徑的符號連結,而無需實際輸入它?

作為參考,我使用的是 Mac OS X 10.9 和 Zsh。

以絕對路徑連結到目前目錄的最簡單方法是,無需鍵入整個路徑字元串

ln -s "$(pwd)/foo" ~/bin/foo_link

該命令的target(第一個)參數ln -s相對於符號連結的位置起作用,而不是您的目前目錄。它有助於知道,本質上,創建的符號連結(第二個參數)只是保存您為第一個參數提供的文本。

因此,如果您執行以下操作:

cd some_directory
ln -s foo foo_link

然後移動那個連結

mv foo_link ../some_other_directory
ls -l ../some_other_directory

你會看到它foo_link 試圖指向foo它所在的目錄。這也適用於指向相對路徑的符號連結。如果您執行以下操作:

ln -s ../foo yet_another_link

然後移動yet_another_link到另一個目錄並檢查它指向的位置,你會發現它總是指向../foo. 這是預期的行為,因為很多時候符號連結可能是目錄結構的一部分,可以駐留在各種絕對路徑中。

在您的情況下,當您通過鍵入創建連結時

ln -s foo ~/bin/foo_link

foo_link只是持有一個foo相對於其位置的連結。將目標參數的名稱放在$(pwd)前面只是添加目前工作目錄的絕對路徑,以便使用絕對目標創建連結。

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