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