GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Beenden Sie das Programm, nachdem es eine bestimmte Zeile aus einem Shell-Skript ausgegeben hat

Wenn Ihr Programm mit SIGPIPE beendet wird (was die Standardaktion ist), sollte es ausreichen, die Ausgabe in einen Reader zu leiten, der beim Lesen dieser Zeile beendet wird.

Es könnte also so einfach sein wie

$ program | sed -e '/Suitable text from the line/q'

Wenn Sie die Standardausgabe unterdrücken möchten, verwenden Sie

$ program | sed -n -e '/Suitable text from the line/q'

Ebenso könnte man, wenn man nach einer bestimmten Anzahl von Zeilen aufhören möchte, head anstelle von sed verwenden, z. B.

$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER

Der genaue Zeitpunkt, zu dem der Kill erfolgt passt hängen vom Pufferverhalten des Terminals ab, wie stardt in den Kommentaren vorschlägt.


Ein Wrapper-Skript wie dieses ist ein Standardansatz. Das Skript führt das Programm im Hintergrund aus und durchläuft dann eine Schleife, wobei jede Minute die Protokolldatei auf eine Zeichenfolge überprüft wird. Wenn die Zeichenfolge gefunden wird, wird das Hintergrundprogramm beendet und das Skript beendet.

command="prog -foo -whatever"
log="prog.log"
match="this is the what i want to match"

$command > "$log" 2>&1 &
pid=$!

while sleep 60
do
    if fgrep --quiet "$match" "$log"
    then
        kill $pid
        exit 0
    fi
done

Als Alternative zur Antwort von dmckee wird der grep Befehl mit dem -m Option (siehe z. B. diese Manpage) Befehl kann auch verwendet werden:

compbio | grep -m 1 "Text to match"

zu stoppen, wenn 1 Zeile gefunden wird, die mit dem Text übereinstimmt, oder

compbio | grep -v -m 10 "Text to match"

auf 10 Zeilen zu warten, die nicht mit dem gegebenen Text übereinstimmen.


Linux
  1. So führen Sie Python-Skripte von der Shell aus

  2. Ist es möglich, ein Bash-Shell-Skript mit einem anderen Befehlszeilenprogramm interagieren zu lassen?

  3. Führen Sie Shell-Befehle aus einem Programm aus, das in WINE ausgeführt wird

  4. Shell-Skript funktioniert gut ohne Shebang-Zeile? Wieso den?

  5. Holen Sie sich die ersten 5 Zeichen aus jeder Zeile im Shell-Skript

Programmieren Sie Hardware über die Linux-Befehlszeile

Eine eingehende Mail von Text/plain zu Text/html ändern?

Echotext nach Curl-Befehl in derselben Zeile?

Bash-Skript zum Zentrieren von Fortune/Text von Stdin/Pipe?

Holen Sie sich eine bestimmte Zeile aus einer Textdatei, indem Sie nur ein Shell-Skript verwenden

Rückgabewert vom Python-Skript zum Shell-Skript