请帮忙建议如何使用bash来捕获子进程的stdout并将字符发送到子进程的stdin。
例如,使用bash控制10个视频转换为ffmpeg进程,bash代码需要观察每个ffmpeg进程的stdout然后决定是否发送stdin命令[+]
/ [-]
/ [c]
/ [q]
或其他命令控制ffmpeg
ffmpeg -i INPUT_n -c copy -f flv out_n.flv 2>&1 | grep "[MY_PATTERN]"
仅当[MY_PATTERN]出现时,此作业会在其stdout上显示单词。 我想使用bash代码来捕获作业的标准输出,根据包含MY_PATTERN的行执行一些决定,然后将命令输入到作业的标准输入。 我想我需要通过bash激活新的shell来执行作业并交互其stdin / stdout。但是如何?
答案 0 :(得分: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
将在模式匹配后立即执行。