Answers:
您在第一行中编写的内容看起来像一个完整的命令(shell术语中的“(化合物)列表”),因此shell将其视为完整的命令。由于这里有一个此处文档开始标记(<<END),因此外壳程序将读取此处文档的内容,然后启动一个新命令。如果要将此处文档放在列表的中间,则需要向Shell指示列表未完成。这有几种方法。
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位之后的下一个换行符的单个令牌。反斜杠换行符会使换行符无效。