我想通过java在linux中运行nm命令。
我试过这段代码:
command = "nm -l file1.o > file1.txt";
Process p = Runtime.getRuntime().exec(command);
但它不起作用,代码出了什么问题?
答案 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>”使用您的方法)