Bash에서 명령 링크
echo test > actual.txt
호출된 파일의 내용을 "test" 로 대체하여 actual.txt
파일이 없으면 생성합니다. 그러나 파일이 존재하는 경우 bash는 해당 파일을 열고 잘라낸 후 파일에 새 내용을 씁니다.
특히 다음과 같은 경우 리디렉션 명령이 실패합니다.
ln -s /some/illegal/path link.txt
echo test > link.txt
Bash 4.4.12에서는 혼란스러운 오류 메시지가 표시됩니다 link.txt: No such file or directory
.
이를 방지하는 한 가지 방법은 리디렉션 명령을 실행하기 전에 파일을 삭제하는 것입니다.
rm link.txt && echo test > link.txt
그러나 이 실패 모드를 방지하기 위해 bash 옵션이나 리디렉션 연산자를 약간 조정할 수 있는지 알고 싶습니다. 어떤 아이디어가 있나요?
답변1
죽은 심볼릭 링크에 쓰려고 시도하는 것은 존재하지 않는 경로에 쓰려고 시도하는 것과 같습니다. 에서 경로(중간 디렉터리 포함)를 생성하기 위해 출력 리디렉션을 "조정"할 수 있는 방법이 없으며 이 프로세스를 자동화하는 bash
셸 옵션도 없습니다 .bash
중간 경로가 존재하지만 링크의 끝점이 없는 경우 리디렉션을 통해 생성됩니다.
당신은 다음과 같은 것을 할 수 있습니다
if [ -h file ] && [ ! -f file ]; then
rm file
fi
"파일"이 심볼릭 링크인지( -h
), 기존 일반 파일을 참조하는지( -f
) 테스트합니다. 심볼릭 링크이지만 파일을 참조하지 않는 경우 삭제하세요.