Bash: 파일로 리디렉션하고 항상 새 파일을 만듭니다.

Bash: 파일로 리디렉션하고 항상 새 파일을 만듭니다.

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) 테스트합니다. 심볼릭 링크이지만 파일을 참조하지 않는 경우 삭제하세요.

관련 정보