Это не бесполезно - это специализированная форма простого >
оператора перенаправления (и, возможно, сбивает с толку, ничего общего с каналами). bash
и большинство других современных оболочек имеют опцию noclobber
, которая не позволяет перенаправлению перезаписывать или уничтожать файл, который уже существует. Например, если значение noclobber
true, а файл /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, но я могу ошибаться.
>|
на: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21/…