无法从Java向Bash脚本发送参数

3
我正在尝试通过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());
        }
    }
}

我在使用Runtime.exec时遇到了类似的问题。我认为我的解决方案是直接将参数包含在要执行的程序字符串中。 - ControlAltDel
推荐的方法是使用 ProcessBuilder,尽管在shellshock事件中,这似乎是一段非常危险的代码。 - Elliott Frisch
当你说直接在程序中时,你是指在bash脚本中吗?因为我将实时从用户那里获取参数。 - user3846091
不,我的意思是在“var/www/red/marsh_webreset.sh /”之后。 - ControlAltDel
4个回答

2
请查看一些文档。
您传递给 exec 方法的第二个参数是:
envp - 字符串数组,每个元素都以“name=value”的格式设置环境变量,如果子进程应继承当前进程的环境,则为 null。
我建议查看thisthis
如果要传递环境变量,可以将它们添加为数组,但必须以“key=value”的格式。
例如: $ ONE=1 TWO=2 shell.sh
然后您可以在shell脚本中回显这些变量。
例如: $ echo $ONE

这是一个有效的批评,但它并没有解决问题,对吧? - ControlAltDel
编辑以添加实际用途。 - proulxs

1
您正在错误地传递参数,请尝试以下代码:
Process proc = Runtime.getRuntime().exec("/var/www/redbutton/marsh_webreset.sh "+array[0]+" "+ array[1]+" /");

0

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

你可能还想查看错误流 - 它可能有一个信息丰富的错误消息。此外,我不确定命令字符串末尾的 / 是否有帮助,甚至是否有效。你可能也不想导入 org.omg.CORBA.portable.InputStream


0
你应该逐个发送数组中的每个值。不能将数组作为参数直接发送到 bash 脚本,因为它无法自行提取值。
Process proc = Runtime.getRuntime().exec("/var/www/redbutton/marsh_webreset.sh "+array[0]+" "+ array[1]+" /");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接