1

我正在使用 Runtime.exec() 在 Java 程序中运行 shell 脚本。该脚本基本上编译了一个 java 程序并运行它,它类似于:

./run2.sh "/Users/user/Desktop/Test.java" "Test" "/Users/user/Desktop/"

我的参数通常是 java 文件的绝对路径、类名和假定编译的类文件所在的目录

我的脚本很简单

javac "$1"
cd "$3"
java "$2"

我试过在我的终端中运行生成的命令,它工作正常。但是当java程序运行它时,我得到了错误:

javac: invalid flag: "/Users/user/Desktop/Test.java"

我应该怎么办?我已经尝试了我可以在互联网上找到的所有可能的脚本(*编辑:我当然能想到)

(*编辑:执行语句)

// some code here...
String[] outFile = translate.translate();

try {
    String params = "";
    for(String sss: outFile) {
        String tmp = "\"" + sss + "\"";
        params += tmp + " ";
    }

    String command = "./run2.sh "+params;
    System.out.println(command);

    Process proc = Runtime.getRuntime().exec(command);
} //respective catch

第一行,String[] outFile = translate.translate()返回我所谓的参数的数组字符串

4

1 回答 1

0

您的错误是在传递给的命令字符串中包含引号字符exec()。该exec()方法不知道如何处理引号或其他“shell 语言”的东西。您最好尝试执行如下命令:

Runtime.getRuntime().exec(new String[]{command, arg1, arg2, arg3});

其中命令和参数字符串周围没有引号。

于 2013-10-12T05:14:03.153 回答