Ist es möglich, einen Befehl in Bash auszuführen und basierend auf der Ausgabe des ersten Befehls einen weiteren zu starten?

Ist es möglich, einen Befehl in Bash auszuführen und basierend auf der Ausgabe des ersten Befehls einen weiteren zu starten?

Ich habe einen Alias ​​erstellt

alias rubyserver='ruby -run -e httpd -- -p 5000 . && open localhost:5000'

um einen Webserver zu starten und dann die vom Server bereitgestellte Seite zu öffnen. Der zweite Befehl wird jedoch erst ausgeführt, wenn der erste Befehl abgeschlossen ist.

Gibt es eine Möglichkeit, den Befehl auszuführen und dann einen zweiten auszuführen, wenn der erste eine bestimmte Zeichenfolge ausgegeben hat?

Der zweite Befehl muss erkennen können, dass der erste Befehl ausgibt WEBrick::HTTPServer#start, was bedeutet, dass der Server bereits läuft und bevor er gestartet wird.

Antwort1

Dies leitet sich aus dieser Antwort auf stackoverflow.com ab:

Im Wesentlichen,

one_command 2>&1 | tee >(grep -Fq keyword && other_command)

Dies 2>&1wird benötigt, wenn Sie auch die Ausgabe erfassen möchten stderr. Wenn Sie das nicht möchten, lassen Sie es weg.


In Ihrem Fall sollte dies funktionieren:

ruby -run -e httpd -- -p 5000 . 2>&1 \
  | tee >(grep -Fq 'WEBrick::HTTPServer#start' && open localhost:5000) 

verwandte Informationen