Can't use && operator in Runtime.exec () + linux
I am trying to run an executable from Java using the code pasted below. Using the && operator in the terminal, I can both navigate and run the executable with a single command. I am trying to pass the same command using Runtime.getRuntime () command. Exec (), but she doesn't seem to like the && operator. Does anyone know about this? In the code below, I am simply passing in "cd && pwd" as a test case; an even simpler command, but still doesn't work. Thanks to
try{
int c;
textArea.setText("Converting Source Code to XML");
//String[] commands = {"/bin/bash", "-c", "cd /home/Parallel/HomeMadeXML", "&&", "./src2srcml --position" + selectedFile.getName() + "-o targetFile.xml"};
String commands = "bash -c cd && pwd";
System.out.println(commands);
Process src2XML = Runtime.getRuntime().exec(commands);
InputStream in1 = src2XML.getErrorStream();
InputStream in2 = src2XML.getInputStream();
while ((c = in1.read()) != -1 || (c = in2.read()) != -1) {
System.out.print((char)c);
}
src2XML.waitFor();
}
catch(Exception exc){/*src2srcml Fail*/}
}
source to share
You want to run a command, you must use exactly three arguments: the bash
executable, the -c
flag for executing the command, and the third shell command.
You are trying to pass 5 where the last three are separate chunks of the same command.
Here's an example. Note that the shell command is only one argument:
String[] commands = { "/bin/bash", "-c", "cd /tmp && touch foobar" };
Runtime.getRuntime.exec(commands);
When executed, you will find the file foobar
created in /tmp
.
source to share