我正在编写一个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说的。
答案 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