这是故事:
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选项来执行绝对路径工作。 >
或者,链接的相对路径比绝对路径更实用吗?
答案 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