在Java中执行自定义命令

时间:2015-03-08 20:45:23

标签: java bash command

有了这个,我们可以在java中执行“build in”命令。但是,如果我们要从this运行一些自定义命令,则将“pwd”更改为“device_id -l”将不起作用。 “device_id -l”应列出当前主机的所有附加设备的ID。如果在终端本身执行“device_id -l”。它工作正常。 “build in”bash命令没有问题。谢谢。

    String cmd = "pwd";
    Runtime run = Runtime.getRuntime();
    Process pr = run.exec(cmd);      
    pr.waitFor();

    BufferedReader buf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
    String line = "";
    while ((line=buf.readLine())!=null)      
        System.out.println(line);

我们可以原谅

2 个答案:

答案 0 :(得分:0)

您可以尝试使用ProcessBuilder

// create process
ProcessBuilder pb = new ProcessBuilder("/bin/bash", "-c", "device_id", "-l");
// start process
Process p = pb.start();
// wait for process exit
p.waitFor();

// read process output
BufferedReader buf = new BufferedReader(newInputStreamReader(p.getInputStream()));
String line = "";
while ((line=buf.readLine())!=null)
    System.out.println(line);

答案 1 :(得分:0)

您需要将命令+参数拆分为String数组。在您的情况下,如果要执行“device_id -l”,请将其拆分为如下数组:

String[] cmd = new String[] {"/full/path/to/device_id", "-l"};
Process pr = Runtime.getRuntime().exec(cmd);

并且,您可能想要使用ProcessBuilder

String[] cmd = new String[] {"/full/path/to/device_id", "-l"};
ProcessBuilder pb = new ProcessBuilder(cmd);
Process pr = pb.start();

最后,您必须考虑到Java不在PATH中查找可执行文件(如命令shell那样),您必须提供要执行的可执行文件/脚本的完整路径(或者它必须在工作目录中;您可以使用ProcessBuilder.directory(File)设置工作目录。

另请参阅:Difference between ProcessBuilder and Runtime.exec()