使用Java的exec在不同的目录中运行.sh文件?

时间:2012-04-10 18:02:04

标签: java shell unix runtime.exec

我正在编写一个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命令String的一个错误,但到目前为止我还没能找到解决方案。我搞砸了哪里?任何其他有效使用exec的提示/技巧都会受到赞赏,但完全是可选的。谢谢!

编辑:我的代码正常运行,这是一个问题,有一些目录引用我倒退了以及Woot4Moo说的。

1 个答案:

答案 0 :(得分: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