【发布时间】:2014-07-04 08:28:08
【问题描述】:
这是一个非常具体的问题,我无法在任何地方找到任何线索。因此,我使用 Runtime.getRuntime().exec() 来从我的 Java 程序中调用许多不同的 Linux 命令。当我应用轻微更改(使用 bash 和字符串数组或不使用)时,以下代码几乎适用于任何类型的 Linux 命令。
command = "ls -l | grep something";
strArr1 = new String[]{"/bin/sh" , "-c", command};
p1 = Runtime.getRuntime().exec(strArr1);
exitVal = p1.waitFor();
但是,当我使用以下命令时,我的程序挂起并且没有完成处理:
command = "more file0.txt";
我也尝试了不同的变体,例如以下一个给出错误:
command = "more keywords/file0.txt";
strArr1 = new String[]{command};
p1 = Runtime.getRuntime().exec(strArr1);
exitVal = p1.waitFor();
或
command = "more keywords/file0.txt";
p1 = Runtime.getRuntime().exec(command);
exitVal = p1.waitFor();
错误是:
There was a problem:java.io.IOException: Cannot run program "more keywords/file0.txt": error=2, No such file or directory
确实,file0.txt 存在。
所以,我想知道 Linux 命令是否在 Runtime.getRuntime().exec() 中更有效?我真的需要这个命令有效,因为它会为其他命令产生结果。提前致谢。
【问题讨论】:
-
more通常用于文本文件的交互式命令行查看。您究竟想如何将结果用于其他命令? -
您似乎误解了
more或less这样的寻呼机的用途。几乎没有理由启动一个进程来读取文件,但如果你愿意,你可能应该使用cat。 -
@ChrisStratton cat 运行良好。谢谢。
标签: java linux runtime.exec