创建到当前目录的绝对符号链接


12

我现在位于路径很长的目录下。为了将来更快地访问它,我想创建一个链接。

我试过了

ln -s . ~/mylink

~/mylink实际上链接到~。那么我可以扩展~为绝对路径名,然后给它ln吗?

Answers:


19

符号链接实际上将您给出的路径实际存储为字符串¹。这意味着您的链接~/mylink包含“ .”(一个字符)。当您访问链接时,该路径将相对于链接的位置而不是您创建链接时所在的位置进行解释。

相反,您可以在链接中存储所需的实际路径:

ln -s "$(pwd)" ~/mylink

使用命令替换pwd(工作目录名称)的输出放入命令行。ln查看完整路径并将其存储到您的符号链接中,然后将其指向正确的位置。

¹ 或多或少。


2
另请参见"$PWD"POSIX shell和~0中的zsh
斯特凡Chazelas

7

您应该使用:

ln -s "$(cd . && pwd)" ~/mylink

要么:

ln -s "$(pwd -P)" ~/mylink

为当前工作目录获得正确的结果。可以像在此问题中一样在工作时更改它。


1
第一个不一定在所有shell中都有帮助(请参阅此答案)。OP可能想使用$PWD(他用来到达$(pwd -P)该目录的路径),而不是(当前目录的规范路径)。如果$PWD不再指向当前目录,那么也不会说$(pwd -P)在下一分钟。
斯特凡Chazelas


@StéphaneChazelas:"$PWD"如果移动当前目录,您仍然可以看到旧值。PWD仅在您设置cd或由外壳初始化时设置。
cuonglm

但是,我要说的是,OP是可能希望旧的$ PWD比当前工作目录中的一些绝对路径,并在几发炮弹(ksh93的,灰,佳日),如解释调用cd不能保证让$ PWD或pwd的输出到当前目录的路径。您正在尝试防范不太可能发生的事情,但是在第一种解决方案中,这不一定有效,在第二种解决方案中,它正在改变行为。
斯特凡Chazelas

1
如果某人mv 您做完之后做完了ln,那么您最终会遇到同样的情况。另一方面,如果他这样做了cd /long/logical/path/to/some/directory,则您不希望链接指向/vg0/lv1/user2/app4(规范路径),因为当/long/logical/path/to/some/directory指向其他位置时,链接将指向错误的位置。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.