特定の出力に基づいてプロセスを終了

特定の出力に基づいてプロセスを終了

特定の出力に基づいてプロセスを終了するにはどうすればよいですか?たとえば、Javaプログラムを実行すると、java -jar xyz.jar標準出力に「ポート8000​​でサーバーを起動する」行が表示された後、プロセスを終了したいと思います。

ベストアンサー1

grep -m1次のスクリプトが機能しない場合は、次のスクリプトを使用して実行できます。

#!/bin/bash

java -jar xyz.jar &> "/tmp/yourscriptlog.txt" &
processnumber=$!
tail -F "/tmp/yourscriptlog.txt" | awk  '/Started server on port 8000/ { system("kill '$processnumber'") }'

デフォルトでは、このスクリプトはstdoutコマンドを使用してJavaコードをファイルにリダイレクトします&> "/tmp/yourscriptlog.txt"。最初の行の最後のコードは &コードを別々のプロセスとして実行し、次の行にはこのプロセスの番号があります$!。プロセス番号とログファイルを使用すると、目的の行がtail印刷されたときに最終的にプロセスを終了できます。

おすすめ記事