실험적으로 실행을 시도했는데 set -o noclobber
오류 echo foo > /dev/null
가 나타나지 않았습니다.
bash-3.2$ set -o noclobber
bash-3.2$ echo "foo" > /dev/null
bash-3.2$ echo "bar" > /dev/null
bash-3.2$ echo "baz" > /dev/null
그러나 이전에 생성한 파일에 동일한 작업을 시도하면 예상되는 오류가 표시됩니다.
bash-3.2$ touch bar.txt
bash-3.2$ echo "bar" > bar.txt
bash: bar.txt: cannot overwrite existing file
noclobber
이 파일이 /dev/null
다른 파일과 다르게 처리되고 있습니까?
참고: 이해합니다.왜(즉, 성격과 목적 때문에 /dev/null
) 이 작업을 수행할 수 있지만 이에 대한 문서는 없습니다.여기. 나는 이것이 문서화되지 않은 기능이라고 생각합니다. 아니면 (아마도) 문서를 놓쳤을 수도 있습니다.
답변1
3.6.2 출력 리디렉션설명하다:
리디렉션 연산자가 " "이고 기본 제공 옵션이
>
활성화된 경우 단어 확장으로 인해 이름이 생성된 파일이 존재하고 일반 파일인 경우 리디렉션이 실패합니다.noclobber
set
하지만 /dev/null
가족과 함께라면 안돼정기적인문서. "문자 특수 파일"입니다.
$ [ -c /dev/null ] ; echo $?
0
$ [ -f /dev/null ] ; echo $?
1
FIFO 파이프와 같은 다른 비전통적인 파일에도 동일하게 적용됩니다.
$ mkfifo foo; set -o noclobber
$ echo > .bashrc
bash: .bashrc: cannot overwrite existing file
$ cat foo & echo a > foo
[1] 18857
a
(아마도 소켓, 블록 장치 등)