1

我正在编写一个 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 所说的问题。

4

1 回答 1

3

好吧,如果您的程序位于:

/home/a/b/c

并且您的脚本位于:

/home/a/b/d

并且您使用的是.您不在正确的目录中。您想使用以下路径执行它:

../d/script.sh

.说使用当前目录+你的字符串。所以本质上你的输入如下:

/home/a/b/c/home/a/b/d

允许您上..一个目录,如果您位于:

/home/a/b/c

你想然后到达:

/home/a/b
于 2012-04-10T18:04:59.540 回答