【问题标题】:How to pass arguments to shellscript using java?如何使用java将参数传递给shellscript?
【发布时间】:2014-06-30 13:01:16
【问题描述】:

我正在使用 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,而不是命令。我已阅读建议的可能重复的问题,但这并不能解决我的问题,我尝试过这种方式,即将参数传递给命令,不适用于 shellscript

【问题讨论】:

  • 你试过明显的:ProcessBuilder pb2=new ProcessBuilder("/home/abhijeet/sample1.sh param1=abc param2=xyz");
  • @SirTroll:我已经读过,但这并没有解决我的问题,我尝试过,这是为了将参数传递给命令,而不是 shellscript
  • 你“尝试”的代码会给你一个语法错误。
  • 你也可以使用Apache commons exec library

标签: java shell


【解决方案1】:

你说需要运行命令:

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

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

要使用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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多