Process の exec 関数を使用して bash コマンドをローカルで実行する Java プログラム MyAwesomeProgram を作成しています。私のコードは /home/a/b/c にあり、実行する必要がある .sh ファイルが /home/a/b/d にあります。ただし、コードを実行すると:
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 を効果的に使用するためのその他のヒント/トリックは高く評価されますが、完全にオプションです。ありがとう!
編集:コードが機能しました。Woot4Mooが言ったことと同様に、逆方向に取得したいくつかのディレクトリ参照の問題でした。