Да, стандарт POSIX позволяет это. По версии 2008 года:
Здесь-документ должен рассматриваться как отдельное слово, которое начинается после следующего <newline>
и продолжается до тех пор, пока не появится строка, содержащая только разделитель и a <newline>
, без <blank>
символов между ними. Затем начинается следующий здесь-документ, если он есть.
И включает этот пример нескольких «здесь-документов» в одну строку:
cat <<eof1; cat <<eof2
Hi,
eof1
Helene.
eof2
Таким образом, нет проблем с перенаправлениями или каналами. Ваш пример похож на что-то вроде этого:
cat file |
cmd
Грамматика оболочки (далее на связанной странице) включает следующие определения:
pipe_sequence : command
| pipe_sequence '|' linebreak command
newline_list : NEWLINE
| newline_list NEWLINE
;
linebreak : newline_list
| /* empty */
Таким образом, за символом вертикальной черты может следовать конец строки, и он все равно будет считаться частью конвейера.
big-long-command1 with lots of args << EOF | big-long-command2 with lots of args
. «Странный синтаксис» кажется лучшим способом.