2013-10-03 2 views
0

bash를 사용하여 하위 프로세스의 stdout을 catch하고 하위 프로세스의 stdin으로 문자를 보내는 방법에 대해 조언 해주십시오. 예를 들어bash 스크립트, stdin/stdout으로 프로세스 제어

10 개 비디오는 FFmpeg 프로세스에 의해 변환 제어하는 ​​떠들썩한 파티를 사용 bash는 코드가 [+]/[-]/[c]/[q] 또는 다른 사람는 FFmpeg에게

을 제어하는 ​​명령을 표준 입력 명령을 보내 결정하면 각는 FFmpeg 프로세스의 표준 출력을 볼 필요가있다

은밀한 작업이 [MY_PATTERN이 작업을 발생 때 표준 출력입니다에서만 단어를 보여줍니다 뭔가

ffmpeg -i INPUT_n -c copy -f flv out_n.flv 2>&1 | grep "[MY_PATTERN]" 

처럼 될 것입니다. bash 코드를 사용하여 작업의 표준 출력을 잡으려고합니다. MY_PATTERN이 포함 된 줄에 따라 결정을 내린 다음 작업의 표준 입력으로 명령을 보내십시오. 작업을 실행하고 해당 stdin/stdout을 상호 작용하기 위해 bash에 의해 활성 새 셸이 필요합니다. 하지만 어떻게?

+0

이 예제에서는 종료 작업뿐만 아니라 MY_PATTERN에 의존하는 다른 작업도 표시합니다. – Yehudi

답변

0

질문을 정확히 이해했다면 grep -q "MY_PATTERN"을 사용해야합니다. 패턴이 일치하자마자 SIGPIPEffmpeg 프로세스로 전송됩니다.

은 당신을 위해 다음과 같은 작업을해야합니다 :

ffmpeg -i INPUT_n -c copy -f flv out_n.flv 2>&1 | grep -q "[MY_PATTERN]" && some_command 

some_command이 즉시 패턴 일치로 실행됩니다.

+0

답장을 보내 주셔서 감사합니다.이 솔루션에는 2 가지 문제가 있습니다. 먼저 MY_PATTERN은 bash에서 다음 탐지 및 대소 문자를 선택해야하는 정규 표현식 일 수 있습니다. 둘째로 동작은 [q]를 입력하여 ffmpeg를 멈추는 것입니다 – Yehudi

+0

이 해결책은 ffmpeg가 끝날 때 some_command가 실행되지만 ffmpeg를 멈추는 것입니다 – Yehudi

+0

@Yehudi 시도해 보셨습니까? 위에서 언급했듯이 이것은'ffmpeg'에'SIGPIPE'를 보냅니다. 그것은 패턴이 발견 되 자마자 멈춰야합니다. – devnull

관련 문제