`set -o noclobber`는 `echo Hello >> file.txt`를 사용한 파일 생성을 방지합니다.

`set -o noclobber`는 `echo Hello >> file.txt`를 사용한 파일 생성을 방지합니다.

나는 사용했다

set -o noclobber

수년에 걸쳐 .bashrc또는 최근에는 .zshrc.

그러나 예를 들어 GitHub 새 저장소 설명에서 다음 줄이 발견되었습니다.

echo SomeName >> README.md

.zshrc이 줄이 있으면 실패할 것입니다 set -o noclobber. 그것은 말할 것입니다 :

zsh: no such file or directory: README.md

확인하기 위해 내 것을 새 zsh .zshrc로 옮기고 .zshrc_not_used시작한 다음 echo SomeName >> README.md파일이 없을 때 해당 줄이 작동했습니다. README.md하지만 이제 새로운 zsh를 시작하고 입력 set -o noclobber하고 수행 echo SomeName >> README_ANOTHER_ONE.md하면 존재하지 않는다고 표시됩니다 README_ANOTHER_ONE.md.

(배경정보는 >>"append to" 이며, 파일이 없으면 새로 생성합니다.)

어떻게 되어가나요? 물론 set -o noclobber실수로 파일을 삭제하고 싶지 않기 때문에 사용하고 싶지만 쉘에 무언가를 지우지 말라고 지시하지만 아무것도 지워지지 않으면 새 콘텐츠 생성을 거부하는 이유가 무엇 noclobber입니까 echo SomeName >> README.md? zsh: no such file or directory: README.md.

실제로 몇 년 전에 Bash에서 이런 일이 일어났던 것을 기억하지만 지금은 그것을 재현할 수 없습니다. 무슨 일이 일어나고 있는지, 이에 대한 좋은 해결책을 아는 사람이 있습니까? (문제를 해결하려면 touch README.mdbefore를 수동으로 입력하지 마세요 echo SomeName >> README.md. "무슨 일이 일어났는지 모르고 수정하세요"가 되기 때문입니다.)

답변1

이것은녹음된zsh의 레거시 동작( csh 에서 상속됨 noclobber) 으로 ksh/POSIX 동작을 얻는 appendcreate것 외에도 noclobber다음을 설정해야 합니다(zsh 5.1 이상 가정).

APPEND_CREATE <K> <S>

이 옵션은 NO_CLOBBER( -C)가 유효한 경우에만 적용됩니다.

>>이 옵션을 설정하지 않으면 아직 존재하지 않는 파일에 추가 리디렉션( )을 사용할 때 쉘에서 오류를 보고합니다(기존 zsh 동작 NO_CLOBBER). 이 옵션을 설정하면 오류가 보고되지 않습니다(POSIX 동작).

% set -o noclobber
% echo foo >> bar
zsh: no such file or directory: bar
% set -o appendcreate
% echo foo >> bar
% cat bar
foo

관련 정보