2011-03-24 100 views
2
cmd1 | cmd2 

将仅以cmd1输出作为参数调用cmd2一次。我想要的是每一行cmd1输出作为参数逐个调用cmd2。也许看起来像这样:bash中是否有管道映射?

cmd1 | map cmd2 

我知道我可以自己写一个,只是想知道是否有内置的支持已经?

回答

2
cmd1 | xargs -l cmd2 

这是我最喜欢的方式。感谢Paulo Ebermann!

+0

我(也许所有的Mac用户)更喜欢'cmd1 | xargs -L1 cmd2'这更通用,'-l'选项在GNU(-L [max-lines]的同义词)中支持,但不支持在BSD中。 – 2013-02-13 11:09:58

+0

@HuiZheng很高兴再次见到你! – Dagang 2013-02-16 14:23:38

2
cmd1 | while read x 
do 
    cmd2 $x 
done 
+0

谢谢,这解决了这个问题,但我想它是一个简单的和一般的地图功能。 – Dagang 2011-03-24 08:07:06

3
for i in `cmd1`; do cmd2 $i; done 

应该这样做。

+0

我真正想要的是管材加工,所以这不是答案。 – Dagang 2011-03-24 08:04:04

0

使用xargs的

cmd1|xargs cmd2 

如:

ls xyz*|xargs grep "abc" 

农行将在其名称中的所有文件进行搜索开始与XYZ

+0

请注意,对于每行'cmd1','xargs'并不能帮助你准确调用'cmd2' ** ** **。它会尽可能地调用'cmd2'! – 2011-03-24 06:52:20

+0

@Joachim Sauer,你是对的:) – Dagang 2011-03-24 08:02:25

+2

@Joachim:有'l'切换到'xargs',但是这样做。 – 2011-03-24 10:57:20

相关问题