为什么我指向 /usr/local/bin 的符号链接不起作用?

mat*_*t3o 4 command-line symbolic-link julia-lang

我通过将 Julia 解压缩到一个文件夹中来在本地安装它。然后我尝试将可执行文件添加到,/usr/local/bin因为我不想修改$PATH.

sudo ln -s bin/julia-1.5.3/bin/julia /usr/local/bin/julia
Run Code Online (Sandbox Code Playgroud)

如果我现在在新的 shell 窗口中执行 Julia,则会弹出以下消息:

$ julia
zsh: command not found: julia

$ ls -l /usr/local/bin/
total 12
lrwxrwxrwx 1 root root 25 Jan  1 10:08 julia -> bin/julia-1.5.3/bin/julia
Run Code Online (Sandbox Code Playgroud)

所以显然符号链接存在,但我的 shell 告诉我找不到命令。这里有什么问题?

mat*_*t3o 11

解决方法相当简单。在这里使用绝对符号链接,以便第一个参数ln -s是完整路径。

sudo ln -s /home/user/bin/julia-1.5.3/bin/julia /usr/local/bin/julia

现在它可以正确打开并按预期执行。

第二个也是更复杂的解决方案是使用相对符号链接。但是,它必须相对于将创建符号链接的文件夹。因此,从/usr/local/bin一个开始必须向上移动三个文件夹/,然后下降到适当的文件夹。

sudo ln -s ../../../home/user/bin/julia-1.5.3/bin/julia /usr/local/bin/julia

更新:下面的评论是正确的,我相应地编辑了答案。相对符号链接很好并且有充分的理由存在,但是在这里它们没有任何意义,因为它们使路径复杂化了很多。

  • 它不一定*总是*必须是绝对的,在这种情况下这只是合理的做法。相对符号链接有其用途,否则它们一开始就不存在。 (13认同)