$HOME 하위 디렉터리 내에서 도트 파일을 관리하고 $HOME 내에서 심볼릭 링크를 설정하는 쉘 스크립트를 작성하려고 합니다.
#!/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
등.
심볼릭 링크를 만들 때
ln -s source target
그러면 이것은 당신이 작성한 방식을 target
정확하게 가리키는 심볼릭 링크가 될 것입니다 .source
따라서 누락된 것은 소스에 대한 경로입니다(여기서는 $PWD
현재 디렉터리의 절대 경로를 보유하는 변수를 사용합니다).
ln -s "$PWD/$i" "$HOME/$i"
위치해 있는 경우가 대부분입니다표적링크를 만들 때:
ln -s some/dir/where/the/file/is mylink
링크(링크가 가리키는 경로)는 절대적이거나 링크 위치에 상대적이어야 합니다.
답변2
동일한 디렉토리(즉, 이 사용자의 홈 디렉토리)에 있습니까? 그렇다면 자체적으로 연결됩니다 ...
다른 디렉터리에 있는 경우 대상에 대한 전체 경로를 지정해야 합니다.