나는 사용했다
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.md
before를 수동으로 입력하지 마세요 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