2015-11-18 4 views
0

Когда я пытаюсь использовать grep pattern и записывать в файл, иногда он жалуется, что файл bar.txt уже существует, поэтому я должен использовать >> вместо >, чтобы перезаписать его.проблемы с перенаправлением в csh

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

Но если файл не существует, используя >> он будет жаловаться на нет такого файла или каталога. Есть ли способ заставить оболочку автоматически принять собственное решение? Если этого не существует, создайте файл. Если существует, перезапишите.

+1

'>>' не перезаписывается; либо вы запутались в том, что делает '' '' '', или вы смущены тем, что означает «переписать». – ruakh

+3

Также, согласно http://www.gnu.org/software/bash/manual/bashref.html, '>' не будет жаловаться на то, что файл уже существует, если вы не установили опцию 'noclobber', а'> > 'will * never * жалуется, что файл еще не существует. Вы уверены, что используете Bash? – ruakh

+0

Я использую csh @ruakh – Bryan

ответ

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, вы можете вернуть его в исходное. Или, если он включен по умолчанию или установить в общесистемном файле запуск оболочки, просто добавить строку в файл гс:

unset noclobber 

И вы должны быть хорошо идти.

+0

Вы очень желанны. Если это решит вашу проблему, пожалуйста, не забудьте щелкнуть зеленую стрелку в левой части ответа, чтобы пометить свой вопрос как разрешенный. – ghoti

+0

Вы также можете перезаписать 'noclobber' с помощью'>! ', А для очень новых версий tcsh (сентябрь 2015 г. и позже) вы можете использовать' set noclobber = ask'. – Carpetsmoker