Bash에서 하나의 명령을 실행하고 첫 번째 명령의 출력을 기반으로 다른 명령을 시작할 수 있습니까?

Bash에서 하나의 명령을 실행하고 첫 번째 명령의 출력을 기반으로 다른 명령을 시작할 수 있습니까?

별칭을 만들었어요

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

그러면 웹 서버가 시작되고 서버에서 제공하는 페이지가 열립니다. 그러나 두 번째 명령은 첫 번째 명령이 완료될 때까지 실행되지 않습니다.

해당 명령을 실행한 다음 첫 번째 명령이 특정 문자열을 출력할 때 두 번째 명령 실행을 시작하는 방법이 있습니까?

두 번째 명령은 첫 번째 명령의 print out 을 볼 수 있어야 합니다 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) 

관련 정보