21

ProcessBuilder クラスを使用して、Java アプリケーションから 2 つ以上のコマンドを順番に実行したいと考えています。他の回答/フォーラムで提案されているように、複数のオプションを試しましたが、運がありません.

私が試したことは次のとおりです。

    ProcessBuilder processBuilder = new ProcessBuilder("ls", ";", "pwd");

次のエラーが表示されます:

エラー: ls: ;: そのようなファイルまたはディレクトリはありません エラー: ls: pwd: そのようなファイルまたはディレクトリはありません

    ProcessBuilder processBuilder = new ProcessBuilder("ls", "&&", "pwd");

同様のエラーが表示されます:

エラー: ls: &&: そのようなファイルまたはディレクトリはありません エラー: ls: pwd: そのようなファイルまたはディレクトリはありません

    List<String> command = new ArrayList<String>();
    command.add("ls");
    command.add(";");
    command.add("pwd");
    ProcessBuilder processBuilder = new ProcessBuilder(command);

次のエラーが表示されます。

エラー: ls: ;: そのようなファイルまたはディレクトリはありません エラー: ls: pwd: そのようなファイルまたはディレクトリはありません

私の OS は Linux/Mac-OSX です。

4

3 に答える 3

28

lsあなたのアプローチは、指定された引数で呼び出すことと同等です。Bash 表記では、実行しているものは次のとおりです。

ls ';' pwd
ls '&&' pwd

ls別のコマンドとして実行したい場合はpwd、Bash (または別のシェル言語) を使用してそれらを単一のコマンドにラップできます。

bash -c 'ls ; pwd'

この方法で呼び出すことができます:

ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "ls ; pwd");
于 2012-09-04T17:34:54.437 に答える
3

最初のコマンドのProcessBuilder.start()からプロセスを取得し、 waitFor( )を使用して待機してから、2 番目のコマンドを起動できます。

于 2012-09-04T17:35:00.177 に答える