Xargs可用于将标准输入的内容切割为可管理的部分,并在每个这样的部分上调用命令。但是有可能知道它是哪一块吗?举个例子:
seq 1 10 | xargs -P 2 -n 2 mycommand
将致电
mycommand 1 2 &
mycommand 3 4 &
mycommand 5 6 &
mycommand 7 8 &
mycommand 9 10 &
但我想在我的“mycommand”脚本中知道
mycommand 1 2
正在处理第一个/段,依此类推。是否可以访问该信息?
P.S。在上面的简单示例中,我可以看看数字并告诉我们。但对于任意列表,如何在不实际注入输入流中的#片段的情况下访问信息?
答案 0 :(得分: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
这可能正是您所寻找的。 p>