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です。
あなたのアプローチは、指定された引数でls
を呼び出すことと同じです。 Bash表記では、実行しているのは次のとおりです。
ls ';' pwd
ls '&&' pwd
ls
とpwd
を別々のコマンドとして実行する場合は、Bash(または別のシェル言語)を使用して、それらを1つのコマンドにラップできます。
bash -c 'ls ; pwd'
あなたはこのように呼ぶことができます:
ProcessBuilder processBuilder = new ProcessBuilder("bash", "-c", "ls ; pwd");
私はProcessBuilderを使用してJavaプログラムをこのようにコンパイルしていますが、これで動作します:
ProcessBuilder b = new ProcessBuilder("cmd.exe","/c","cd " + dir,
" & javac " + mapClassName + ".Java -cp " + pathToProjectClasses);
したがって、2つのコマンドがあります。最初のコマンドはcd
コマンドで、2番目のコマンドはjavac
コマンドで、&
を使用して順番に実行します。
私の悪いライティングスキルで申し訳ありませんが、私のコードをうまく説明していない場合は、知りたいことについて私に尋ねてください。
最初のコマンドから ProcessBuilder.start() からプロセスを取得し、 waitFor() を使用して待機してから、2番目のコマンドを起動できます。