我正在编写一个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/d
并且使用
.
不在正确的目录中。您要使用以下路径执行它:../d/script.sh
.
说使用当前目录+您的字符串。因此,实质上,您的输入如下:/home/a/b/c/home/a/b/d
..
允许您进入一个目录,如果您位于:/home/a/b/c
然后您要到达:
/home/a/b