简体   繁体   中英

Runtime.exec() to bash javac error

I'm using Runtime.exec() to run a shell script in a Java program. The script basically compiles a java program and runs it and goes something like:

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

my parameters in general are the absolute path of the java file, class name and directory where the supposedly compiled class file is

my script is simply

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

I've tried running the resulting command in my Terminal and it works fine. however when the java program runs it, I get and error:

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

What should I do? I've tried every possible script I can find on the internet (*edit: and I can think of, of course)

(*edit: execute statement)

// 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

the first line, String[] outFile = translate.translate() returns an array Strings of my supposedly parameters

Your mistake is including quote characters in the command string that you are passing to exec() . The exec() method does NOT know how to deal with quotes or other "shell language" stuff. You would be better off trying to execute the command something like this:

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

where the command and arguments strings DO NOT have quotes around them.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM