做什么>!和>>!在tcsh做

时间:2011-07-20 13:00:31

标签: redirect tcsh

在正常的bash重定向>中将标准输出重定向到文件,在存在时覆盖并>>将标准输出重定向到文件,在存在时附加。

在tcsh(c shell)脚本中,我发现正在使用运算符>! >>!。这个运营商做了什么? tcsh也有>>>运算符,那有什么区别?

2 个答案:

答案 0 :(得分:34)

在tcsh重定向中!符号表示即使设置了noclobber也会覆盖现有文件。

换句话说,如果设置了noclobber,那么:

    如果 file 不存在,
  • cmd > file会将stdout写入文件
  • 如果 file 存在,则
  • cmd > file将失败
  • 如果 file 存在,
  • cmd >> file会将stdout追加到文件
  • 如果 file 不存在,
  • cmd >> file将失败
  • cmd >! file会将stdout写入文件,覆盖任何现有文件
  • cmd >>! file会将stdout追加到文件,如果该文件尚不存在则会创建该文件

如果noclobber 设置,那么!没有效果:

  • cmd > file会将stdout写入文件,覆盖任何现有文件
  • cmd >> file会将stdout追加到 file
  • cmd >! file会将stdout写入文件,覆盖任何现有文件
  • cmd >>! file会将stdout追加到 file

答案 1 :(得分:3)

在某些情况下,感叹号会禁止检查要写入的文件类型。

引用tcsh手册页:

  

如果设置了shell变量noclobber,则该文件不能存在或者是字符特殊文件(例如,终端或'/ dev / null')或错误结果。这有助于防止意外破坏文件。在这种情况下,'!'表单可用于抑制此检查。