Це не марно - це спеціалізована форма >
оператора простого перенаправлення (і, можливо, заплутано, нічого спільного з трубами). 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 підтримує обидва синтаксиси. Я не думаю, що він був доданий до будь-якого варіанту оболонки Борна, але я можу помилитися.
>|
на: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21 / ...