То, что вы написали в первой строке, выглядит как завершенная команда («(составной) список» в терминологии оболочки), поэтому оболочка рассматривает ее как завершенную команду. Так как есть маркер начала здесь-документа ( <<END
), оболочка затем считывает содержимое здесь-документа и затем запускает новую команду. Если вы хотите поместить документ here в середину списка, вам нужно указать оболочке, что список еще не закончен. Вот несколько способов.
mpirun -np 6 ./laplace <<END |
…
END
tail -n 1 > output
{ mpirun -np 6 ./laplace <<END
…
END
} | tail -n 1 > output
Или, конечно, вы можете убедиться, что команда полностью помещается в первой строке.
mpirun -np 6 ./laplace <<END | tail -n 1 > output
…
END
Правило, которое нужно помнить: содержимое документа здесь начинается после первой строки без кавычек после <<END
индикатора. Например, вот еще один запутанный способ написания этого скрипта:
mpirun -np 6 ./laplace <<END \
| tail -n $(
…
END
echo 1) > output
<<END
бита. Обратная косая черта-новая строка аннулирует новую строку.источник