2013-10-03 5 views
0

Пожалуйста, помогите советовать, как использовать bash, чтобы поймать stdout субпроцесса и отправить символ в stdin подпроцесса.сценарий bash, процессы управления с помощью stdin/stdout

Например, использовать Баш для управления 10 видео конвертировать процессом FFmpeg, Баш код должен следить за стандартный вывод каждого процесса FFmpeg, а затем решает, если отправить команду STDIN [+]/[-]/[c]/[q] или другие команды, чтобы контролировать FFmpeg

негласная работа будет что-то вроде

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

только тогда, когда [MY_PATTERN] происходит эта работа показывает слово на это стандартный вывод. Я хотел бы использовать код bash, чтобы поймать stdout задания, принять какое-то решение в соответствии с линией, включенной MY_PATTERN, а затем подать команду в stdin задания. Думаю, мне нужно активировать новую оболочку bash для выполнения задания и взаимодействия с его stdin/stdout. Но как?

+0

пример теперь выражает не только действие выхода, но и другие действия, которые зависят от MY_PATTERN – Yehudi

ответ

0

Если я задал вопрос правильно, вам нужно использовать grep -q "MY_PATTERN". Это приведет к отправке SIGPIPE в процесс ffmpeg, как только будет согласован шаблон.

Следующая должно работать для вас:

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. Во-вторых, действие заключается в том, чтобы остановить ffmpeg, введя [q] в stdin – Yehudi

+0

это решение, команда some_ будет выполняться, когда ffmpeg заканчивается, но я пытаюсь добиться остановки ffmpeg – Yehudi

+0

@Yehudi Пробовал ли вы это? Как упоминалось выше, это отправит 'SIGPIPE' в' ffmpeg'. Это должно остановить его, как только будет найден шаблон. – devnull

Смежные вопросы