csh中的重定向问题

redirection problems in csh

当我尝试 grep 模式并写入文件时,有时它会抱怨文件 bar.txt 已经存在,所以我必须使用 >> 而不是 > 来覆盖它.

grep 'pattern' foo.txt >> bar.txt

但是如果文件不存在,使用>>它会抱怨没有这样的文件或目录。 shell 有没有办法自动做出自己的决定?如果不存在,则创建一个文件。如果存在,则覆盖。

摘自tcsh man page

   > name
           ...
           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  acciden-
           tal  destruction  of  files.
           ...


   >> name
           ...
           Like `>', but appends output to the end of name.  If the  shell
           variable noclobber is set, then it is an error for the file not
           to exist, unless one of the `!' forms is given.

所以...在我看来你好像设置了 "noclobber"。

% set noclobber
% echo foo >> bar
bar: No such file or directory.
% echo foo > bar
% echo foo > bar
bar: File exists.
% unset noclobber
% echo foo > bar

如果这个特殊的 shell 变量是在您的 .tcshrc.cshrc.login 中设置的,您可以取消设置。或者,如果它默认打开或在系统范围 shell 启动文件中设置,只需在您的 rc 文件中添加一行:

unset noclobber

你应该可以开始了。