Такое перенаправление «|>» - просто ошибка или что-то значит?

9

Я набрал его по ошибке, но bash не печатал никаких ошибок (но создал пустой файл), поэтому я подумал, может, это действительно что-то значит? (например, date |> tmp.txt)

Бдымыч2 Бдимыч2
источник
1
Вы уверены, что команда не в форме date |> tmp.txt cmd2? Потому что это меняет ответ.
Конрад Рудольф

Ответы:

17

Кажется, это просто конвейер, где вторая часть - пустая команда, содержащая только перенаправление. Писать так, как это date | >fileможет облегчить интерпретацию. Пустая команда ничего не делает, но обрабатывает перенаправление, создавая файл.

date >| fileс другой стороны, будет действовать как переопределение для noclobberопции оболочки, которая не позволяет обычным >перезаписывать существующие файлы.

$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo       # works
ilkkachu
источник
1

Да, он не выдаст ошибку, потому что для bash > fileозначает перенаправление в файл с именем file. Поскольку в вашем случае нечего перенаправлять в файл, bash просто создаст имя файла, в fileкотором ничего нет.

[bd@centos-6.5 my-tests]$ date | > my_file
[bd@centos-6.5 my-tests]$ cat my_file
[bd@centos-6.5 my-tests]$ 
Бхагеш Дудхедия
источник
Веселая. Zsh имеет другое поведение: после команды my_fileсодержит вывод date.
NI
12
@NajibIdrissi, in zsh, когда есть только перенаправления и нет команды, zshзапускает $NULLCMDкоманду ( catпо умолчанию) или $READNULLCMD(пейджер по умолчанию), если есть только входные перенаправления.
Стефан Шазелас,