Bashで1つのコマンドを実行し、最初のコマンドの出力に基づいて別のコマンドを起動できますか?

Bashで1つのコマンドを実行し、最初のコマンドの出力に基づいて別のコマンドを起動できますか?

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

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

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

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

2番目のコマンドは、最初のコマンドの印刷アウトを見ることができるはずですWEBrick::HTTPServer#start。これは、サーバーが起動する前にすでに実行中であることを意味します。

ベストアンサー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) 

おすすめ記事