JavaからBashシェルスクリプトを実行しようとしていますが、このコードを使用すると正常に実行されます。
public void executeScript() {
try {
new ProcessBuilder("myscript.sh").start();
System.out.println("Script executed successfully");
} catch (IOException e) {
e.printStackTrace();
}
}
上記のコードは非同期で正常に実行されます。しかし、私が達成したいのは、コードを同期的に実行することです。 Javaプロセスで、スクリプトの実行が完了するまで待機してから、次のコードバッチを実行したいと思います。
要約すると、「Printステートメント-スクリプトが正常に実行されました」を実行したいと思います後バッチファイル( "myscript.sh")が実行を完了します。
ありがとう
プロセスが終了するのを待ちたい、つまり waitFor() このように
public void executeScript() {
try {
ProcessBuilder pb = new ProcessBuilder(
"myscript.sh");
Process p = pb.start(); // Start the process.
p.waitFor(); // Wait for the process to finish.
System.out.println("Script executed successfully");
} catch (Exception e) {
e.printStackTrace();
}
}
ファイルをある場所から別の場所に移動したい場合、上記のコードは機能しないため、以下のコードで修正しました。
class Shell
{
public static void main(String[] args) {
try {
ProcessBuilder pb = new ProcessBuilder("/home/sam/myscript.sh");
Process p = pb.start(); // Start the process.
p.waitFor(); // Wait for the process to finish.
System.out.println("Script executed successfully");
} catch (Exception e) {
e.printStackTrace();
}
}
}
myscript.sh
#!/bin/bash
mv -f /home/sam/Download/cv.pdf /home/sam/Desktop/
Process#waitFor()
を使用して、スクリプトが終了するまでJavaコードを一時停止します。
try {
Process p = new ProcessBuilder("myscript.sh").start();
int rc = p.waitFor();
System.out.printf("Script executed with exit code %d\n", rc);