Bash: Что делает «> |»?

Я только что видел это записано;

$ some-command >| /tmp/output.txt

Вертикальные трубы используются в стандартных переадресациях «piping» вывода одной команды на другую, это >| на самом деле абсолютно бесполезно, поскольку это будет то же самое, что просто > в этом сценарии?

138 голосов | спросил jwbensley 10 PM00000010000003431 2012, 13:51:34

1 ответ


205

Это не бесполезно - это специализированная форма простого оператора > перенаправления (и, возможно, смущающая связь с трубами). bash, и большинство других современных оболочек имеют опцию noclobber, которая предотвращает перенаправление или перезаписывание файла, который уже существует. Например, если noclobber истинно, а файл /tmp/output.txt уже существует, это должно завершиться неудачно:

$ some-command > /tmp/output.txt

Однако вы можете явно переопределить параметр noclobber с помощью оператора перенаправления >| - перенаправление будет работать, даже если noclobber установлен.

Вы можете узнать, установлен ли noclobber в вашей текущей среде с помощью set -o.

Для исторической заметки, как опция «noclobber», так и ее функции обхода происходят из csh (конец 70-х). ksh скопировал его (начало 80-х), но использовал >| вместо >!. POSIX задал синтаксис ksh (так что все оболочки POSIX, включая bash, более новые производные золы, используемые как sh в некоторых системах, поддерживают его). Zsh поддерживает оба синтаксиса. Я не думаю, что это было добавлено к любому варианту оболочки Bourne, но я могу ошибаться.

ответил D_Bye 10 PM00000020000001631 2012, 14:23:16

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132