Command-Line

根據特定輸出終止程序

  • March 9, 2020

如何根據該程序的特定輸出終止該程序?例如,使用 執行 Java 程序java -jar xyz.jar,我想在 stdout 上出現“埠 8000 上的已啟動伺服器”行時終止該程序。

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我們最終可以在列印所需的行時終止程序。

引用自:https://unix.stackexchange.com/questions/554081