使用Linux more命令时,Runtime.getRuntime()。exec()挂起

时间:2014-05-15 18:22:28

标签: java linux runtime.exec

这是一个非常具体的问题,我无法在任何地方找到任何单一线索。所以,我使用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()?我真的需要这个命令,因为它产生其他命令的结果。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您的程序挂起,因为在shell中执行的more命令要求用户按Enter /空格继续滚动。从Java执行时也是如此。如果您需要输出到标准输出,则可能需要尝试cat

答案 1 :(得分:0)

是的,您不应该像许多其他人指出的那样使用more,但您遇到的错误可能是因为您正在对不存在的文件执行more ...至少不在more正在运行的地方。

尝试放置文件的完整位置,错误应该消失。

例如,如果文件位于根temp文件夹中,请执行

more /temp/keywords/file0.txt

如果您不知道文件的位置,pwd应该告诉您文件的位置。 转到文件file0.txt的文件夹,然后在那里pwd