Я только что видел это записано;
$ some-command >| /tmp/output.txt
Вертикальные каналы, используемые в стандартных перенаправлениях, «передающие» выходные данные одной команды другой, >|
на самом деле совершенно бесполезны, поскольку будут такими же, как и >
в этом сценарии?
bash
io-redirection
pipe
jwbensley
источник
источник
>|
на: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21/…Ответы:
Это не бесполезно - это специализированная форма простого
>
оператора перенаправления (и, возможно, сбивает с толку, ничего общего с каналами).bash
и большинство других современных оболочек имеют опциюnoclobber
, которая не позволяет перенаправлению перезаписывать или уничтожать файл, который уже существует. Например, если значениеnoclobber
true, а файл/tmp/output.txt
уже существует, то это должно завершиться ошибкой:Однако вы можете явно переопределить настройку
noclobber
с помощью>|
оператора перенаправления - перенаправление будет работать, даже еслиnoclobber
оно установлено.Вы можете узнать, установлен ли
noclobber
он в вашей текущей среде с помощьюset -o
.Для исторического примечания, и опция "noclobber" и ее особенности обхода берут начало
csh
(конец 70-х).ksh
скопировал его (начало 80-х), но использовал>|
вместо>!
. В POSIX указанksh
синтаксис (поэтому все оболочки POSIX, включая bash, более новые производные золы, используемые в некоторых системах как sh, поддерживают его). Zsh поддерживает оба синтаксиса. Я не думаю, что это было добавлено к любому варианту оболочки Bourne, но я могу ошибаться.источник
sh
имеетnoclobber
примерно с мая 2002 года.