【发布时间】:2014-11-10 17:00:27
【问题描述】:
我正在尝试使用下面粘贴的代码从 Java 运行可执行文件。通过在终端中使用 && 运算符,我可以使用单个命令导航到可执行文件并运行该可执行文件。我试图通过 Runtime.getRuntime().exec() 命令传递相同的命令,但它似乎不喜欢 && 运算符。有谁知道解决这个问题?在下面发布的代码中,我只是将“cd && pwd”作为测试用例传递;一个更简单的命令,但它仍然不起作用。谢谢
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*/}
}
【问题讨论】:
-
你试过了吗:
String commands = "bash -c 'cd && pwd'"; -
正如@anubhava 表示
bash -c cd && pwd被shell 解析为bash -c cd、&&、pwd,您需要将cd && pwd作为参数传递给-c。 -
@anubhava 这行得通吗?还是会执行带有四个参数
"-c"、"'cd"、"&&"、"pwd'"的命令?他可能需要使用带有String[]参数的exec()。 This 暗示它使用一个非常简单的 Tokenizer 并且不会解释单引号。 -
我想将
exec()与String[] arguments一起使用会更好,并且OP 也会在注释代码中显示它。
标签: java linux bash terminal runtime.exec