Я ввів його помилково, але bash не надрукував жодних помилок (але створив порожній файл), тому я подумав, може, це насправді щось означає? (наприклад, дата |> tmp.txt)
Я ввів його помилково, але bash не надрукував жодних помилок (але створив порожній файл), тому я подумав, може, це насправді щось означає? (наприклад, дата |> tmp.txt)
Відповіді:
Це здається просто трубопроводом, де друга частина - це порожня команда, що містить лише перенаправлення. Написання цього тексту date | >fileможе полегшити його тлумачення. Порожня команда нічого не робить, але обробляє перенаправлення, створюючи файл.
date >| fileз іншого боку, буде виконувати функції переключення noclobberоболонки, що заважає регулярному >перезаписувати наявні файли.
$ touch foo; set -o noclobber
$ date > foo
bash: foo: cannot overwrite existing file
$ date >| foo # works
Так, це не призведе до помилки, оскільки для 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]$
my_fileміститься вихід date.
zshколи, якщо є лише переадресації та немає команди, zshзапускається $NULLCMDкоманда ( catза замовчуванням) або $READNULLCMD(пейджер за замовчуванням), якщо є лише вхідні переадресації.
date |> tmp.txt cmd2? Тому що це змінює відповідь.