我正在编写一个bash脚本,以使DVD创作更加自动化(但主要是为了让我可以学习更多bash脚本)并且我试图找出它是否可能控制exterrnal命令如何显示其输出。
例如,ffmpeg的输出是(对我来说)关于选项,库,流,进度等无关紧要的负载。
我真正想要的是能够选择仅显示带有输入和输出文件名的行,然后每次都在同一行显示进度。同样适用于mkisofs和wodim。
我已经尝试过谷歌搜索,并开始怀疑它是不可能的,或者之前没有人想过它(或者,可能,它是如此明显,没有人认为有必要说:-))。
非常感谢,提前,
David Shaw
答案 0 :(得分:2)
您想使用grep和管道。他们是你的朋友。您希望将ffmpeg的输出通过管道传输到grep中,并让它只输出包含所需文本的行。
假设您的输入和输出文件名作为命令行参数$ 1和$ 2到shell脚本,您可以尝试类似
的内容ffmpeg .... | grep "$1\|$2" ^ ^ | +-- escape and OR character +--pipe character
' \ |'是正则表达式的转义符和OR字符。 OR' |'也是管道角色,所以你必须逃避它。
这将仅输出包含您要查找的文件的输出行。
这假设所有输出都是通过标准输出。如果ffmpeg通过stderr输出文本,那么你需要在ffmpeg行的末尾添加一些重定向,将它们重定向回到stdout。
编辑:我在第一个例子中使用了错误的引号。使用双引号或它不会扩展参数$ 1和$ 2