To, co napisałeś w pierwszym wierszu, wygląda jak kompletne polecenie („lista (złożona)” w terminologii powłoki), więc powłoka traktuje to jako kompletne polecenie. Ponieważ jest tu znacznik rozpoczęcia dokumentu ( <<END
), powłoka odczytuje zawartość dokumentu tutaj, a następnie uruchamia nowe polecenie. Jeśli chcesz umieścić dokument tutaj na środku listy, musisz wskazać powłoce, że lista nie jest ukończona. Oto kilka sposobów.
mpirun -np 6 ./laplace <<END |
…
END
tail -n 1 > output
{ mpirun -np 6 ./laplace <<END
…
END
} | tail -n 1 > output
Lub oczywiście możesz upewnić się, że polecenie całkowicie mieści się w pierwszym wierszu.
mpirun -np 6 ./laplace <<END | tail -n 1 > output
…
END
Zasadą, o której należy pamiętać, jest to, że treść dokumentu zaczyna się po pierwszej niecytowanej nowej linii po <<END
wskaźniku. Na przykład, oto inny zaciemniony sposób pisania tego skryptu:
mpirun -np 6 ./laplace <<END \
| tail -n $(
…
END
echo 1) > output
<<END
bicie. Odwrotny ukośnik-nowa linia unieważnia nową linię.źródło