我也有这个问题。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
因此不会读取任何内容并单独保留标准输入。