「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

(おそらくソケット、ブロックデバイスなど)

関連情報