터미널에서 실행되고 준비가 되면 사용 중인 포트를 출력하는 서버 유형 프로그램(http-server)을 시작해야 합니다. 포트 번호가 표시될 때까지 기다린 다음 서버 유형 프로그램이 될 다른 명령을 실행하고 싶습니다(사용자 상호 작용을 실행하고 허용함).
거의 사용할 수 있어요
http-server | (grep -m 1 "Server runing"; interactiveProgram)
InteractiveProgram은 grep이 첫 번째 줄과 일치한 후에 시작되지만 대화형은 아닙니다.)
답변1
문제는 다음과 같습니다.
http-server | (grep -m 1 "Server running"; interactiveProgram)
interactiveProgram
표준 입력은 터미널에 연결되지 않지만 http-server
표준 출력에서 파이프로 연결됩니다( grep
완료되면).
http-server | (grep -m 1 "Server running"; interactiveProgram < /dev/tty)
당신이 원하는 것을해야합니다.
답변2
이것을 파이프라인의 일부로 실행하면 @Stephen Kitt가 이미 말했듯이 표준 입력이 터미널에 연결되지 않습니다. 그러나 나중에 실행하면 http-server가 종료될 때까지 실행되지 않습니다.
해결 방법은 -loop를 사용 while
하고 grep
한 줄에 한 번씩 호출하는 것입니다.
http-server | while read line; do
echo "$line" | grep "Server running" && { interactiveProgram; break; }
done