这两个重定向有什么区别?
[localhost ~]$ echo "something" > a_file.txt
[localhost ~]$ echo "something" >| a_file.txt
我似乎无法找到有关> |的任何文档在help。
答案 0 :(得分:3)
>|
会覆盖shell中的noclobber
选项(使用$ set -o noclobber
设置,表示无法写入文件)。
基本上,对于noclobber
,如果您尝试使用>
覆盖现有文件,则会出现错误:
$ ./program > existing_file.txt
bash: existing_file.txt: cannot overwrite existing file
$
使用>|
将覆盖该错误并强制写入文件:
$ ./program >| existing_file.txt
$
这类似于在许多shell命令中使用-f
或--force
选项。
从Bash Reference Manual部分“3.6.2重定向输出”:
如果重定向运算符为
>
,并且已启用set builtin的noclobber
选项,则如果名称来自单词扩展的文件存在并且是常规的,则重定向将失败文件。如果重定向运算符为>|
,或者重定向运算符为>
且未启用noclobber
选项,则即使以word命名的文件存在,也会尝试重定向。
搜索“bash noclobber”通常会提到在某处提到这一点的文章。有关示例,请参阅this question on SuperUser,this section in O'Reilly's "Unix Power Tools"和this Wikipedia article on Clobbering。