Bash
ln -s 相對於 pwd 的路徑
我正在嘗試創建一堆符號連結,但我無法弄清楚為什麼這會起作用
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)
前面只是添加目前工作目錄的絕對路徑,以便使用絕對目標創建連結。