如何使用java将参数传递给shell脚本?

时间:2014-06-30 13:01:16

标签: java shell

我使用以下命令从java代码调用shell脚本:

ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh ");
Process script_exec = pb2.start();

哪个成功运行,但我需要传递一些参数,所以我需要执行这个脚本:

param1=abc param2=xyz /home/abhijeet/sample1.sh

我试过这段代码:

 ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh ","param1=abc","param2="xyz");

但它对我不起作用。如何在使用Processbuilder进行调用时将争论传递给shell脚本?

注意:我的问题是关于将参数传递给shellscript,而不是传递给commands.i已阅读建议可能重复的问题,但这不能解决我的问题,我尝试了这种方式,即将争论传递给命令,不是用于shellcript

1 个答案:

答案 0 :(得分:4)

你说你需要运行命令:

param1=abc param2=xyz /home/abhijeet/sample1.sh

在这种情况下,“param1”和“param2”字符串不是命令行参数。这是shell语法,用于设置两个环境变量 param1param2,然后调用sample1.sh

要使用ProcessBuilder完成此操作,您需要访问构建器的环境变量:

ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh");
pb2.environment().put("param1", "abc");
pb2.environment().put("param2", "xyz");
Process script_exec = pb2.start();

作为替代方案,您尝试运行的命令使用shell语法,因此您可以将其传递给shell来执行它:

ProcessBuilder pb2=new ProcessBuilder(
    "/bin/sh",
    "-c",
    "param1=abc param2=xyz /home/abhijeet/sample1.sh");
Process script_exec = pb2.start();