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?
In tcsh redirection the ! symbol means overwrite the existing file even if noclobber is set.
In other words, if noclobber is set then:
cmd > filewill writestdoutto file if file does not existcmd > filewill fail if file existscmd >> filewill appendstdoutto file if file existscmd >> filewill fail if file does not existcmd >! filewill writestdoutto file, overwriting any existing filecmd >>! filewill appendstdoutto file, creating the file if it does not already exist
If noclobber is not set then the ! has no effect:
cmd > filewill writestdoutto file, overwriting any existing filecmd >> filewill appendstdoutto filecmd >! filewill writestdoutto file, overwriting any existing filecmd >>! filewill appendstdoutto file
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