我也有这个问题。Claudio 的解决方案帮助我走上了正确的道路,让我理解了循环在第一次迭代后退出的原因。首先,这是一个非常接近您所写的解决方案:
cat a.txt | while read line; do
</dev/null mpiexec -np 16 ./a.out ${line}
done
请注意,我只是mpiexec在本地计算机上使用,(python 的线程情况非常糟糕,需要这个)所以我无法测试这是否适用于单独的主机。您可以尝试将其添加回自己。
您的脚本不起作用的原因是它mpiexec似乎吞噬了附加到标准输入的任何内容。我假设它这样做是为了在a.out需要该输入的情况下,它会吞噬所有输入并将其与要运行的命令一起a.out发送到其他服务器。结果是在第一次迭代中,read从文件中读取第一行。然后mpiexec读取其余的行,即使a.out在您的情况下可能不使用它们。然后在第二次迭代中,read尝试读取更多行,但由于mpiexec已经读取了其余行,read因此被告知已到达文件末尾,因此循环退出。
由于我们想阻止mpiexec读取标准,我们将mpiexec的标准重定向到来自 /dev/null。由于 /dev/null 始终不包含任何内容,mpiexec因此不会读取任何内容并单独保留标准输入。