csh

时间:2015-11-18 02:19:10

标签: shell grep csh

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

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

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

1 个答案:

答案 0 :(得分:0)

摘自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

如果在.tcshrc.cshrc.login中设置了此特殊shell变量,则可以取消设置。或者,如果默认情况下处于打开状态或在系统范围的shell启动文件中设置,只需在rc文件中附加一行:

unset noclobber

你应该好好去。