"noclobber" 옵션이 설정되면 "/dev/null"이 다른 파일과 다르게 처리됩니까?

"noclobber" 옵션이 설정되면 "/dev/null"이 다른 파일과 다르게 처리됩니까?

실험적으로 실행을 시도했는데 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 출력 리디렉션설명하다:

리디렉션 연산자가 " "이고 기본 제공 옵션이 >활성화된 경우 단어 확장으로 인해 이름이 생성된 파일이 존재하고 일반 파일인 경우 리디렉션이 실패합니다.noclobberset

하지만 /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

(아마도 소켓, 블록 장치 등)

관련 정보