我正在尝试管理 $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
您是否站在同一目录中(即该用户的主目录)?如果是的话,它将链接到自身......
如果您位于不同的目录中,则需要指定目标的完整路径。