Bash 在脚本中并行重定向

Bash redirection in a script in parallel

我有一个 bash 脚本,其中包含我想要并行 运行 的进程循环:

for i in {1..5}
do
echo Running for simulation $i
python script.py $i > ./outlogs/$i.log 2>&1 &
done

但是当我这样做时,文件重定向不起作用,所以 $i.log 只是保持为空。重定向仅在我最后不使用 & 时有效,但脚本会等待每个进程完成后再开始下一个进程,这是我不想要的。

我尝试了一个使用 script -c 的解决方案,但这不会实时更新,只有在进程结束时才会更新。有没有人有更好的建议,文件重定向在这个脚本中有效但它仍然实时更新?

您只需要添加 -u 选项,它看起来像这样:

python -u script.py $i > ./outlogs/$i.log 2>&1 &

选项 -u 用于无缓冲的二进制标准输出和标准错误