Shell重定向操作> |?

时间:2014-12-08 19:18:21

标签: io-redirection

这两个重定向有什么区别?

[localhost ~]$ echo "something" > a_file.txt
[localhost ~]$ echo "something" >| a_file.txt

我似乎无法找到有关> |的任何文档在help

1 个答案:

答案 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 SuperUserthis section in O'Reilly's "Unix Power Tools"this Wikipedia article on Clobbering