O que você escreveu na primeira linha parece um comando completo (uma “lista (composta)” na terminologia do shell), então o shell o trata como um comando completo. Como há um marcador inicial do documento aqui ( <<END
), o shell lê o conteúdo do documento aqui e, em seguida, inicia um novo comando. Se você quiser colocar o documento here no meio de uma lista, você precisa indicar ao shell que a lista não está terminada. Aqui estão algumas maneiras.
mpirun -np 6 ./laplace <<END |
…
END
tail -n 1 > output
{ mpirun -np 6 ./laplace <<END
…
END
} | tail -n 1 > output
Ou, claro, você pode ter certeza de que o comando se encaixa completamente na primeira linha.
mpirun -np 6 ./laplace <<END | tail -n 1 > output
…
END
A regra a ser lembrada é que o conteúdo do documento aqui é iniciado após a primeira nova linha sem aspas, após o indicador <<END
. Por exemplo, aqui está outra maneira ofuscada de escrever esse script:
mpirun -np 6 ./laplace <<END \
| tail -n $(
…
END
echo 1) > output