通过java运行linux命令。

时间:2011-07-29 06:26:04

标签: java linux command-line

我想通过java在linux中运行nm命令。

我试过这段代码:

command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(command);

但它不起作用,代码出了什么问题?

3 个答案:

答案 0 :(得分:4)

这不是可执行文件,它实际上是一个shell脚本。

如果使用-c调用shell,则可以执行命令:

/bin/sh -c "command > here"

答案 1 :(得分:2)

以下是您需要做的事情:

String command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(new String[]{"/bin/sh", "-c", command});

以下“简单回答”无效

String command = "/bin/sh -c 'nm -l file1.o > file1.txt'";
Process p = Runtime.getRuntime().exec(command);

因为exec(String)方法使用空格作为分隔符并且忽略任何引用而天真地分割其字符串。因此,上面的示例等同于提供以下命令/参数列表。

new String[]{"/bin/sh", "-c", "'nm", "-l", "file1.o", ">", "file1.txt'"};

答案 2 :(得分:0)

管道的替代方法是读取命令的标准输出,请参阅Java exec() does not return expected result of pipes' connected commands以获取示例。

不是使用“> file.txt”重定向输出,而是读取输出的内容,并将其写入StringBuffer或OutputStream或任何您喜欢的内容。

这样做的好处是您还可以读取stderr并查看是否存在错误(例如设备上没有剩余空间等)。 (您也可以使用“2>”使用您的方法)