1

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が言ったことと同様に、逆方向に取得したいくつかのディレクトリ参照の問題でした。

4

1 に答える 1

3

あなたのプログラムが住んでいるならよく:

/home/a/b/c

スクリプトは次の場所にあります。

/home/a/b/d

そして、あなたは.あなたが正しいディレクトリにいないことを使用します。次のパスで実行します。

../d/script.sh

.、現在のディレクトリと文字列を使用します。したがって、本質的に、入力は次のとおりです。

/home/a/b/c/home/a/b/d

を使用すると、次の..場所にいる場合に1つのディレクトリに移動できます。

/home/a/b/c

次に到着したい:

/home/a/b
于 2012-04-10T18:04:59.540 に答える