Linux符号链接如何使当前目录中的目标文件成为自动绝对路径?

时间:2018-10-09 14:04:13

标签: bash

这是故事:

cd ~
mkdir bin
export PATH=$PATH:bin
mkdir -p projects
cd projects
echo 'hello world' > hello.sh
chmod +x hello.sh
ln -s hello.sh ~/bin/hello
hello

输出:

-bash: hello: command not found

我如何更改它:

ln -s hello.sh ~/bin
hello.sh

输出更奇怪:

-bash: /home/qht/bin/hello.sh: Too many levels of symbolic links 

请让我看看发生了什么

ls -l ~/bin/hello.sh
/home/qht/bin/hello.sh -> hello.sh 

我知道了,hello.sh引用了自己。还有在引用hello.sh之前的hello。

我通过以下方式修复它:

ln -sf $PWD/hello.sh ~/bin/hello
ls ~/bin/hello
/home/qht/bin/hello -> /home/qht/projects/hello.sh

它有效,我也,看看是否有方便的方法可以做到这一点,这就是我发现的:

ln -sfr hello.sh ~/bin/hello
ls -l ~/bin/hello
/home/qht/bin/hello -> ../projects/hello.sh

而且有效,-r选项可以完成工作。

但是我很好奇,如果ln -r可以自动将相对路径数据写入符号链接,为什么可能没有-a选项来执行绝对路径工作。

或者,链接的相对路径比绝对路径更实用吗?

1 个答案:

答案 0 :(得分:0)

尝试一下:

cd ~
mkdir bin
export PATH=$PATH:~/bin                 # Need absolute path to bin
mkdir -p projects
cd projects
echo 'echo "hello world"' > hello.sh    # If the script is just hello world
                                        # this will become an infinite loop
chmod +x hello.sh
ln -s "$PWD/hello.sh" ~/bin/hello       # the symbolic link in this case
                                        # needs to be a absolute path
hello