Можно ли выполнить команду в bash и запустить другую на основе вывода первой?

Можно ли выполнить команду в bash и запустить другую на основе вывода первой?

Я создал псевдоним

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

чтобы запустить веб-сервер и затем открыть страницу, обслуживаемую сервером. Но вторая команда не будет запущена, пока не будет завершена первая команда.

Есть ли способ запустить команду, а затем запустить вторую, когда первая выведет определенную строку?

Вторая команда должна иметь возможность увидеть, что первая команда выводит 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) 

Связанный контент