2

Runtime.getRuntime().exec() を使用して、Java コードからシェル スクリプトを実行しています。

    String[] cmd = {"sh",  "build.sh", "/Path/to my/sh file"};
    try{
        Process proc = Runtime.getRuntime().exec( cmd );
    }
    catch(Exception e){
        System.out.println("Exception is:"+e);
    }

コンソールに次の出力が表示されます。

sh: Can't open build.sh

ここで間違ったアプローチに従っていますか?なぜ彼が起こったのかわかりません。

編集

ここのコメントに基づいて、に変更しString[] cmd = {"sh", "build.sh", "/Path/to my/sh file"};ましたString[] cmd = {"sh", "/Path/to my/sh file/build.sh", "/Path/to my/sh file"};。問題は、このスクリプトを特定のパスから実行する必要があることです。このスクリプトをコマンド プロンプトから実行するときは、まずディレクトリをそのパスに変更して実行します。このコードをどのように変更すればよいですか?

4

4 に答える 4

4

を使用してProcessBuilder、プロセスの作業ディレクトリをスクリプトが実際にあるディレクトリに設定します。

final ProcessBuilder pb = new ProcessBuilder("/bin/sh", "script.sh", "whatever",
    "arguments", "go", "here");
pb.directory(new File("/path/to/directory"));
// redirect stdout, stderr, etc
final Process p = pb.start();

ProcessBuilderjavadocを参照してください。何ができるかの例が含まれています。Runtime.exec()時代遅れです:p

于 2013-06-17T08:03:19.433 に答える