使用 xargs 在命令中间传递多个参数

使用 xargs 在命令中间传递多个参数

有没有办法使用 xargs 在命令中间传递多个参数?

例如,我有一个文件javaoptions.txt,其中包含一组默认的 Java 选项。我希望能够做类似的事情

xargs -I % java % ClassName < javaoptions.txt

并将所有选项传递给一个命令。然而,如果我尝试这样做,它会使用多个命令,每次传递一个选项。

无论如何,我无法修改正在执行的源代码

答案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(或 shell 的等效项)中,然后您可以运行:

runJava Classname

跑步

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

答案2

简单地:

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

相关内容