我正在编写一个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

07-28 02:38
查看更多