쉘 스크립트가 계속해서 깨진 심볼릭 링크를 생성합니다.

쉘 스크립트가 계속해서 깨진 심볼릭 링크를 생성합니다.

$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

동일한 디렉토리(즉, 이 사용자의 홈 디렉토리)에 있습니까? 그렇다면 자체적으로 연결됩니다 ...

다른 디렉터리에 있는 경우 대상에 대한 전체 경로를 지정해야 합니다.

관련 정보