Те, що ви написали в першому рядку, схоже на повну команду ("складний список" у термінології оболонки), тому оболонка трактує її як повну команду. Оскільки тут є маркер запуску тут-документа ( <<END), оболонка зчитує вміст документа тут і запускає нову команду. Якщо ви хочете поставити документ тут у середині списку, вам потрібно вказати оболонці, що список не закінчений. Ось кілька способів.
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