给定一个应用程序 ,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' _