2

Xargs 可用于将标准输入的内容切割成可管理的片段,并在每个这样的片段上调用命令。但是有可能知道它是哪一块吗?举个例子:

序列 1 10 | xargs -P 2 -n 2 我的命令

将会通知

mycommand 1 2 &
mycommand 3 4 &
mycommand 5 6 &
mycommand 7 8 &
mycommand 9 10 &

但我想在我的“mycommand”脚本中知道

mycommand 1 2

正在处理第一件/段,依此类推。是否可以访问该信息?

ps 在上面的简单示例中,我可以只看数字并判断。但是对于任意列表,如何在不实际在输入流中注入片段#的情况下访问信息?

4

1 回答 1

0

如果您更改输入并添加序列号,我只看到您可以这样做:

seq 1 10 | perl -ne '$. % 2 and print (($.+1)/2,"\n"); print' | xargs -n3 ...

不清楚为什么需要这个,但如果你的最终目标是保持输出与输入的顺序相同,使用 GNU Parallel 可能更容易:

seq 1 10 | parallel -j+0 -n2 -k mycommand 

观看 GNU Parallel 的介绍视频以了解更多信息:http ://www.youtube.com/watch?v=OpaiGYxkSuQ

自 20101113 版以来,GNU Parallel 具有 $PARALLEL_SEQ,它被设置为命令的序列号:

seq 1 10 | parallel -j+0 -n2 -k mycommand \$PARALLEL_SEQ

这可能正是您正在寻找的。

于 2010-10-24T22:16:12.980 回答