我正在尝试创建一堆符号链接,但我不明白为什么这是有效的
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_link
foo
仅保留相对于其位置的链接。放在$(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