ln -s 带有相对于 pwd 的路径

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 有关,而/Users/niels/bin不是/Users/niels/something

所以问题是,如何创建一个指向绝对路径的符号链接,而不需要实际键入它?

作为参考,我使用的是 Mac OS X 10.9 和 Zsh。

答案1

以绝对路径链接到当前目录(无需键入整个路径字符串)的最简单方法是

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_linkfoo仅保留相对于其位置的链接。放在$(pwd)目标参数名称前面只是添加当前工作目录的绝对路径,以便使用绝对目标创建链接。

答案2

使用-r( --relative) 标志将使此工作有效:

ln -sr foo ~/bin/foo_link

答案3

为了节省一些打字,你可以这样做

ln -s "$PWD"/foo ~/bin/foo_link

答案4

怎么样:

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

相关内容