例如,使用命令
cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
包含foo.txt
两行
foo
bar
上述命令不打印任何内容。
答案1
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
棘手的部分是 xargs 执行隐式子 shell 调用。这里 sh 显式调用,pipe 不会成为父传送器的一部分
答案2
如果你想处理 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