我正在尝试通过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());
}
}
}
答案 0 :(得分:2)
看看一些文档。
您传递给exec方法的第二个参数是:
envp - 字符串数组,其每个元素的格式为name = value的环境变量设置,如果子进程应继承当前进程的环境,则为null。
如果要传递环境变量,可以将它们添加为数组,但必须采用格式" 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 ] +" /");