Answers:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
棘手的部分是xargs执行隐式子shell调用。在这里,sh被显式调用,并且管道不成为父级传送器的一部分
cat foo.bar | wc -l
和cat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-I
代替-J
; -J
xargs 没有选择
xargs
具有-J
等效于-i
linux的选项xargs
-J
在POSIX中未定义,但-I
用途与GNU有所不同。)
如果要处理foo.txt的所有行,则必须使用循环。使用&
把进程背景
while read line; do
echo $line | bar.sh &
done < foo.txt
如果您的输入包含空格,请暂时将内部字段分隔符设置为换行符
# save the field separator
OLD_IFS=$IFS
# new field separator, the end of line
IFS=$'\n'
for line in $(cat foo.txt) ; do
echo $line | bar.sh &
done
# restore default field separator
IFS=$OLD_IFS
xargs
用OP 的选项。