Это не бесполезно - это специализированная форма простого >оператора перенаправления (и, возможно, сбивает с толку, ничего общего с каналами). bashи большинство других современных оболочек имеют опцию noclobber, которая не позволяет перенаправлению перезаписывать или уничтожать файл, который уже существует. Например, если значение noclobbertrue, а файл /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/…