bash でコマンドを実行し、最初のコマンドの出力に基づいて別のコマンドを開始することは可能ですか?

bash でコマンドを実行し、最初のコマンドの出力に基づいて別のコマンドを開始することは可能ですか?

エイリアスを作成しました

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

Web サーバーを起動し、サーバーによって提供されるページを開きます。ただし、最初のコマンドが完了するまで 2 番目のコマンドは実行されません。

最初のコマンドが特定の文字列を出力するたびに、コマンドを実行し、2 番目のコマンドの実行を開始する方法はありますか?

WEBrick::HTTPServer#start2 番目のコマンドは、最初のコマンドが を出力していること、つまりサーバーがすでに実行中であること、および起動前に であることを確認できる必要があります。

答え1

これは、stackoverflow.com のこの回答から派生したものです。

本質的には、

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

2>&1出力をキャプチャしたい場合にもが必要です。出力をキャプチャstderrしたくない場合は省略してください。


あなたの場合はこれが機能するはずです:

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

関連情報