【发布时间】:2012-04-10 18:02:03
【问题描述】:
我正在编写一个 Java 程序 MyAwesomeProgram,它使用 Process 的 exec 函数在本地运行 bash 命令。我的代码位于 /home/a/b/c 中,我需要运行位于 /home/a/b/d 中的 .sh 文件。但是,当我运行我的代码时:
Process p;
Runtime rt = new Runtime.getRuntime();
p = rt.exec("./home/a/b/d/shell.sh");
p.waitFor();
我收到一个错误:
Exception in thread "main" java.io.IOException: Cannot run program "./home/a/b/d/shell.sh": java.io.IOException: error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at java.lang.Runtime.exec(Runtime.java:328)
at MyAwesomeProgram.main(MyAwesomeProgram.java:186)
Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
我相信这只是格式化 exec 命令字符串的一个错误,但是到目前为止我还没有找到解决方案。我哪里搞砸了?任何其他有效使用 exec 的提示/技巧将不胜感激,但完全是可选的。谢谢!
编辑:我的代码工作正常,这是我得到的几个目录引用以及 Woot4Moo 所说的问题。
【问题讨论】:
-
你试过不带 .?如果你的代码是从 /home/a/b/c 运行的,那就是 /home/a/b/c/home/a/b/d/shell.sh
-
请发布您如何从命令行运行它。包括您当前的目录(即 /home/chris)
-
javac MyAwesomeProgram.java,java MyAwesomeProgram。 main 方法包含代码(这是一个虚拟程序,用于在我将其合并到更大的已测试程序组之前测试 exec 功能)。一切必要的东西都已经导入并经过测试,可以按预期工作。
-
对不起,如果我误解了,你的意思是实际的命令,而不是我从 /home/a/b/c/ 作为“../d/script.sh”运行它的程序您在下面的答案中发布了。
标签: java shell unix runtime.exec