我有一些与管道一起工作的 shell 脚本,例如:
foo.sh | bar.sh
Run Code Online (Sandbox Code Playgroud)
我bar.sh调用了一些只能接受一定数量的标准输入行的命令行程序。因此,我希望将foo.sh的大标准输出分成 N 行以进行多次bar.sh调用。本质上, paginatefoo.sh的 stdout 并执行多个bar.sh.
是否可以?我希望在管道之间有一些魔法,比如foo.sh | ??? | bar.sh. xargs -n并没有完全得到我想要的。
我离一台机器很远来测试这个,但你需要GNU Parallel让它变得简单 - 沿着以下路线:
foo.sh | parallel --pipe -N 10000 -k bar.sh
Run Code Online (Sandbox Code Playgroud)
作为额外的好处,它将bar.sh与您拥有的 CPU 内核一样多地并行运行。
-j 1如果您一次只想要一个bar.sh,请添加。
--dry-run如果您想看看它会做什么但不做任何事情,请添加。