将gnu的输出与单个文件或管道并行管道是否安全?

时间:2018-05-15 12:33:21

标签: parallel-processing scripting io-redirection

使用类似于

的构造
find . -type f -name '*log' \
| parallel grep 'somestuff'    
| moreComplexLineRearrangementScript
| sort

我想知道moreComplexLineRearrangementScript是否存在看到乱码行的风险,因为几个grep实例在没有任何缓冲同步的情况下写入同一个管道。

  1. 这对于如上所述的grep的天真使用是否会成为一个问题,或者我可以依赖grep的实现总是使用flush()写入行的事实?
  2. 如果它不是grep,那么parallel中是否会有一些魔术用于刷新()?
  3. 有没有办法使用parallel来保证线条保持完整 - 除了重定向每个并行进程'输出到一个单独的文件,然后从那里去?

1 个答案:

答案 0 :(得分:2)

默认情况下, GNU Parallel 缓冲按作业输出,因此不同作业的输出并非全部混淆,即:

parallel --group

如果您希望 GNU Parallel 执行一次一行输出,可能混合来自不同作业的输出,但总是在整行中,请使用:

parallel --line-buffer

如果你喜欢你的输出真的很高级,并且所有人都混在一起,请使用:

parallel --ungroup