17

Опция bash noclobber предотвращает перезапись файлов с перенаправлением. Но иногда я очень хочу. csh есть аналогичная опция, и ее можно переопределить, поставив ! перед именами файлов. Есть ли способ сделать это с bash?

2 ответа2

19

Да. Добавить | к оператору перенаправления на форму >| , Это в п. 3.6.2 Справочного руководства Bash , см.

Если оператор перенаправления имеет значение «>», и опция noclobber для встроенного набора включена, перенаправление завершится ошибкой, если существует файл, имя которого является результатом расширения слова и является обычным файлом. Если оператор перенаправления «> |» или оператор перенаправления «>» и опция noclobber не включена, перенаправление выполняется даже в том случае, если существует файл, названный словом.

Посетите этот учебник о опции noclobber. Это может помочь

3

Использование | ("труба") в bash , а не ! ("взрыв"), как вы бы в csh . Например:

echo done >| out

Обратите внимание, что если вы хотите перенаправить stderr в stdout и переопределить noclobber , ни >|& ни &>| буду работать; используйте вместо этого длинную форму:

cmd-with-errors done >| out 2>&1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .