То, что Вы записали в первой строке, похоже на полную команду (“(составной) список” в терминологии оболочки), таким образом, оболочка рассматривает его как полную команду. С тех пор существует здесь-документ, запускают маркер (<<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
mpirun -np 6 ./laplace <<END | tail -n 1 > output
100
100
100
0.01
100
3
2
1
END
<<END
бит. Новая строка обратной косой черты аннулирует новую строку. – Gilles 'SO- stop being evil' 26.05.2011, 23:06