Опция bash
noclobber
предотвращает перезапись файлов с перенаправлением. Но иногда я очень хочу. csh
есть аналогичная опция, и ее можно переопределить, поставив !
перед именами файлов. Есть ли способ сделать это с bash
?
2 ответа
Да. Добавить |
к оператору перенаправления на форму >|
, Это в п. 3.6.2 Справочного руководства Bash , см.
Если оператор перенаправления имеет значение «>», и опция noclobber для встроенного набора включена, перенаправление завершится ошибкой, если существует файл, имя которого является результатом расширения слова и является обычным файлом. Если оператор перенаправления «> |» или оператор перенаправления «>» и опция noclobber не включена, перенаправление выполняется даже в том случае, если существует файл, названный словом.
Посетите этот учебник о опции noclobber. Это может помочь
Использование |
("труба") в bash
, а не !
("взрыв"), как вы бы в csh
. Например:
echo done >| out
Обратите внимание, что если вы хотите перенаправить stderr
в stdout
и переопределить noclobber
, ни >|&
ни &>|
буду работать; используйте вместо этого длинную форму:
cmd-with-errors done >| out 2>&1