最初のコマンド一致の出力をgrepingした後にコマンドを実行する方法

最初のコマンド一致の出力をgrepingした後にコマンドを実行する方法

端末で実行して準備ができたら、使用しているポートを出力するサーバータイププログラム(http-server)を起動する必要があります。ポート番号が表示されるのを待ってから、サーバータイププログラムになる別のコマンドを実行したいと思います(ユーザーの対話を実行して許可します)。

ほとんど使えます

http-server | (grep -m 1 "Server runing"; interactiveProgram)

InteractiveProgramは、grepが最初の行と一致した後に開始されますが、インタラクティブではありません.)

答え1

問題は次のとおりです。

http-server | (grep -m 1 "Server running"; interactiveProgram)

interactiveProgram標準入力は端子に接続されていませんが、http-server標準出力からパイプに接続されます(grep完了したら)。

http-server | (grep -m 1 "Server running"; interactiveProgram < /dev/tty)

あなたが欲しいものをする必要があります。

答え2

これをパイプラインの一部として実行すると、@Stephen Kittがすでに述べたように、標準入力は端末に接続されません。ただし、後で実行すると、http-serverが終了するまで実行されません。

回避策は、-loopを使用whileしてgrep1行に1回呼び出すことです。

http-server | while read line; do
    echo "$line" | grep "Server running" && { interactiveProgram; break; }
done

関連情報