xargsを使用してコマンドの途中で複数の引数を渡す

xargsを使用してコマンドの途中で複数の引数を渡す

xargsを使用してコマンドの途中で複数の引数を渡す方法はありますか?

javaoptions.txtたとえば、デフォルトのJavaオプションセットを含むファイルがあります。私は次のことができるようにしたいと思います。

xargs -I % java % ClassName < javaoptions.txt

すべてのオプションをコマンドに渡します。ただし、これを試みると、複数のコマンドを使用して毎回1つのオプションを渡します。

とにかく実行中のソースコードは変更できません。

答え1

javaoptions.txt私が正しく理解したら、Javaコマンドに挿入したいものです。もしそうなら、xargsそれは役に立ちません。これは、他のコマンドの各出力行で同じコマンドを実行することです。必要なものはここにあります。

java $(cat javaoptions.txt) ClassName

(...オプションにスペースやワイルドカードなどが含まれていないと仮定)

しかし、個人的には、オプションを配列に格納する関数を作成して、スペースを含むオプションを使用できるようにしました。

runJava(){
   javaOpts=( -Xmx4g -Djava.io.tmpdir=/tmp/foo ) ## random example
   java "${javaOpts[@]}" "$@"  ## run the java command with the options    
} 

これを~/.bashrcあなたの(またはそれに対応するシェル)に追加すると、以下を実行できます。

runJava Classname

走る

java -Xmx4g -Djava.io.tmpdir=/tmp/foo Classname

答え2

簡単に:

xargs sh -c 'exec java "$@" ClassName' -- < javaoptions.txt

関連情報