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' _

関連情報