无法从java向bash脚本发送参数

时间:2014-09-29 18:53:26

标签: java bash

我正在尝试通过Java在我的Ubuntu机器上运行bash脚本。 bash脚本将2个输入作为参数传递给我作为数组传递 但是,它似乎没有将array [0]和array [1]的值传递给bash脚本?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import org.omg.CORBA.portable.InputStream;

public class readBashScript {

    public static void readBashScript() {
        try {

            String[] array = {"ys1","R"};

            Process proc = Runtime.getRuntime().exec("var/www/red/marsh_webreset.sh /",array); 
            BufferedReader read = new BufferedReader(new InputStreamReader(
                    proc.getInputStream()));
            try {
                proc.waitFor();
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
            while (read.ready()) {
                System.out.println(read.readLine());
            }
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

4 个答案:

答案 0 :(得分:2)

看看一些文档。

您传递给exec方法的第二个参数是:

  

envp - 字符串数组,其每个元素的格式为name = value的环境变量设置,如果子进程应继承当前进程的环境,则为null。

我建议您查看thisthis

如果要传递环境变量,可以将它们添加为数组,但必须采用格式" key = value"。

IE:

  

$ ONE = 1 TWO = 2 shell.sh

然后,您可以在shell脚本中回显这些变量。

  

$ echo $ ONE

答案 1 :(得分:1)

您正在传递错误的参数请尝试以下代码:

Process proc = Runtime.getRuntime().exec("/var/www/redbutton/marsh_webreset.sh "+array[0]+" "+ array[1]+" /");

答案 2 :(得分:0)

看起来你正在调用错误的Runtime.exec()方法。您传递的是一个命令和一组环境变量,但是您希望将参数传递给您正在执行的进程。您想要拨打exec(String, String[])而不是exec(String[])

您可能也希望查看错误流 - 它可能包含信息性错误消息。另外,我不确定命令字符串末尾的/是否有用,甚至是否有效。您可能也不想导入org.omg.CORBA.portable.InputStream

答案 3 :(得分:0)

您应该一次发送数组的每个值。您不能将数组作为bash脚本的参数发送,因为它无法自行提取值。

进程proc = Runtime.getRuntime()。exec(" /var/www/redbutton/marsh_webreset.sh" + array [0] +"" + array [1 ] +" /");