作为一个实验,我尝试运行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
Run Code Online (Sandbox Code Playgroud)
但是,当我对之前创建的文件尝试相同的操作时,我看到了预期的错误:
bash-3.2$ touch bar.txt
bash-3.2$ echo "bar" > bar.txt
bash: bar.txt: cannot overwrite existing file
Run Code Online (Sandbox Code Playgroud)
noclobber
该文件的处理方式与其他文件的处理方式是否/dev/null
不同?
注意:我理解为什么它可能会这样做(即因为它的性质/dev/null
和目的),但我在这里没有看到任何有关此效果的文档。我想这可能是一个未记录的功能,或者(可能更有可能)我只是错过了文档?
mur*_*uru 12
\n\n\n如果重定向运算符为 \xe2\x80\x98
\n>
\xe2\x80\x99,并且已启用noclobber
内置选项set
,则如果名称由单词扩展产生的文件存在且是常规文件,则重定向将失败。
但/dev/null
和家人并不是普通的档案。它们是“字符特殊文件”:
$ [ -c /dev/null ] ; echo $?\n0\n$ [ -f /dev/null ] ; echo $?\n1\n
Run Code Online (Sandbox Code Playgroud)\n这同样适用于其他非常规文件,例如 FIFO 管道:
\n$ mkfifo foo; set -o noclobber\n$ echo > .bashrc\nbash: .bashrc: cannot overwrite existing file\n$ cat foo & echo a > foo\n[1] 18857\na\n
Run Code Online (Sandbox Code Playgroud)\n(大概还有套接字、块设备等)
\n 归档时间: |
|
查看次数: |
734 次 |
最近记录: |