Чи таке перенаправлення "|>" є лише помилкою чи це щось означає?


9

Я ввів його помилково, але bash не надрукував жодних помилок (але створив порожній файл), тому я подумав, може, це насправді щось означає? (наприклад, дата |> tmp.txt)


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

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, zshколи, якщо є лише переадресації та немає команди, zshзапускається $NULLCMDкоманда ( catза замовчуванням) або $READNULLCMD(пейджер за замовчуванням), якщо є лише вхідні переадресації.
Стефан Шазелас
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.