这是一个非常具体的问题,我无法在任何地方找到任何单一线索。所以,我使用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()?我真的需要这个命令,因为它产生其他命令的结果。提前谢谢。
答案 0 :(得分:2)
您的程序挂起,因为在shell中执行的more
命令要求用户按Enter /空格继续滚动。从Java执行时也是如此。如果您需要输出到标准输出,则可能需要尝试cat
。
答案 1 :(得分:0)
是的,您不应该像许多其他人指出的那样使用more
,但您遇到的错误可能是因为您正在对不存在的文件执行more
...至少不在more
正在运行的地方。
尝试放置文件的完整位置,错误应该消失。
例如,如果文件位于根temp文件夹中,请执行
more /temp/keywords/file0.txt
如果您不知道文件的位置,pwd
应该告诉您文件的位置。
转到文件file0.txt的文件夹,然后在那里pwd
。