让 xargs 从标准输入传递标志而不是命令参数

让 xargs 从标准输入传递标志而不是命令参数

给定一个应用程序 ,myApplication它将线路流式传输到标准输出

$ myApplication
flag1
flag2
flag3

如何xargs将这些值作为标志传递给命令,而不是将它们作为参数传递?

例如,调用的结果应该是:

anotherApplication --flag "flag1" parameterNotFromXargs
anotherApplication --flag "flag2" parameterNotFromXargs
anotherApplication --flag "flag3" parameterNotFromXargs

我使用该选项的失败尝试-I产生了错误的输出:

$ myApplication | xargs -L1 -I % echo "e: %"
e: %
e: %
e: %

答案1

无法复制:

$ echo -e "one\ntwo\nthree" | xargs -L1 -I% echo "I was told % times"
I was told one times
I was told two times
I was told three times

如果myApplication在标准输入上返回其输出,则上述调用xargs应该可以正常工作。如果您看到的输出实际上是标准错误,则需要使用 .txt 将其重定向到标准输出myApplication 2>&1

答案2

最简单的方法是脚本

#!/bin/sh
anotherApplication --flag "$1" parameterNotFromXargs

并调用它

myApplication | xargs -L1 ./myscript.sh

如果您想避免使用脚本,可以使用内联命令:

myApplication | xargs -L1 sh -c 'anotherApplication --flag "$1" parameterNotFromXargs' _

相关内容