What do >! and >>! do in tcsh

会有一股神秘感。 提交于 2019-11-26 20:24:34

问题


In normal bash redirection > redirecting standard output to a file, overwriting when it exists and >> redirecting standard output to a file, appending when it exists.

In a tcsh (c shell) script I found the operators >! >>! being used. What do this operators do? tcsh does also have the > and >> operators, so what is the difference?


回答1:


In tcsh redirection the ! symbol means overwrite the existing file even if noclobber is set.

In other words, if noclobber is set then:

  • cmd > file will write stdout to file if file does not exist
  • cmd > file will fail if file exists
  • cmd >> file will append stdout to file if file exists
  • cmd >> file will fail if file does not exist
  • cmd >! file will write stdout to file, overwriting any existing file
  • cmd >>! file will append stdout to file, creating the file if it does not already exist

If noclobber is not set then the ! has no effect:

  • cmd > file will write stdout to file, overwriting any existing file
  • cmd >> file will append stdout to file
  • cmd >! file will write stdout to file, overwriting any existing file
  • cmd >>! file will append stdout to file



回答2:


The exclamation mark suppresses the check for the type of file being written to in certain cases.

To quote the tcsh man page:

If the shell variable noclobber is set, then the file must not exist or be a character special file (e.g., a terminal or ‘/dev/null’) or an error results. This helps prevent accidental destruction of files. In this case the ‘!’ forms can be used to suppress this check.



来源:https://stackoverflow.com/questions/6762348/what-do-and-do-in-tcsh

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!