作为一个实验,我尝试运行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
没有看到任何与此相关的文档。我想这可能是一个未记录的功能,或者(可能更有可能)我只是错过了文档?
第 3.6.2 节重定向输出说:
但是
/dev/null
和家人不是正规档案。它们是“字符特殊文件”:这同样适用于其他非常规文件,例如 FIFO 管道:
(而且,大概还有套接字、块设备等)