Shell 脚本不断创建损坏的符号链接

Shell 脚本不断创建损坏的符号链接

我正在尝试管理 $HOME 子目录内的点文件,并编写一个在 $HOME 内设置符号链接的 shell 脚本。

#!/bin/sh

for i in .cvsignore .gitconfig .npmrc .tmux.conf .zprofile .zshrc; do
    ln -s $i ~/$i
done

由于某种原因,该脚本不断产生损坏的符号链接。

file {~/*,~/.*} | grep "broken symbolic link" | cut -d: -f1

/home/user/.cvsignore
/home/user/.gitconfig
/home/user/.npmrc
/home/user/.tmux.conf
/home/user/.zprofile
/home/user/.zshrc

答案1

符号链接将被破坏,因为它们看起来像

.cvsignore -> .cvsignore

ETC。

当您创建符号链接时

ln -s source target

那么这target将是一个符号链接,它完全指向source您编写它的方式。

因此,缺少的是源的路径(这里我使用$PWD保存当前目录的绝对路径的变量):

ln -s "$PWD/$i" "$HOME/$i"

大多数时候,它位于目标创建链接时:

ln -s some/dir/where/the/file/is mylink

链接(链接指向的路径)应该是绝对的,或者是相对于链接位置的。

答案2

您是否站在同一目录中(即该用户的主目录)?如果是的话,它将链接到自身......

如果您位于不同的目录中,则需要指定目标的完整路径。

相关内容