Redirect 您要做什么>;!及>>;!tcsh中的do

Redirect 您要做什么>;!及>>;!tcsh中的do,redirect,tcsh,Redirect,Tcsh,在正常的bash重定向中,将标准输出重定向到文件,在文件存在时覆盖;将标准输出重定向到文件,在文件存在时追加 在tcsh(cshell)脚本中,我找到了操作符>>>正在使用中。这个操作员做什么?tcsh也有和>操作符,那么有什么区别呢?在tcsh重定向中!符号表示即使设置了noclobber,也会覆盖现有文件 换句话说,如果设置了noclobber,则: 如果文件不存在,cmd>file将stdout写入文件 如果文件存在,cmd>文件将失败 cmd>>文件将在文件存在时将stdout附加到文

在正常的bash重定向中,将标准输出重定向到文件,在文件存在时覆盖;将标准输出重定向到文件,在文件存在时追加


在tcsh(cshell)脚本中,我找到了操作符
>
>>正在使用中。这个操作员做什么?tcsh也有
>
操作符,那么有什么区别呢?

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

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

  • 如果文件不存在,
    cmd>file
    stdout
    写入文件
  • 如果文件存在,
    cmd>文件
    将失败
  • cmd>>文件
    将在文件存在时将
    stdout
    附加到文件中
  • 如果文件不存在,
    cmd>>文件
    将失败
  • cmd>!文件
    stdout
    写入文件,覆盖任何现有文件
  • cmd>>!文件
    stdout
    附加到文件,如果文件不存在,则创建该文件
如果
noclobber
not则设置!无效:

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

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

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

  • 如果文件不存在,
    cmd>file
    stdout
    写入文件
  • 如果文件存在,
    cmd>文件
    将失败
  • cmd>>文件
    将在文件存在时将
    stdout
    附加到文件中
  • 如果文件不存在,
    cmd>>文件
    将失败
  • cmd>!文件
    stdout
    写入文件,覆盖任何现有文件
  • cmd>>!文件
    stdout
    附加到文件,如果文件不存在,则创建该文件
如果
noclobber
not则设置!无效:

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

在某些情况下,感叹号会抑制对写入文件类型的检查

要引用tcsh手册页:

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


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

要引用tcsh手册页:

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


请注意,bash也有类似的功能。它有自己的“noclobber”选项(通常未设置),并使用“>|”和“>>|”来覆盖它。它有自己的“noclobber”选项(通常未设置),并使用“>|”和“>>|”来覆盖它。