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) 

관련 정보