Bash - 控制外部命令的输出

时间:2014-03-26 15:50:23

标签: bash

我正在编写一个bash脚本,以使DVD创作更加自动化(但主要是为了让我可以学习更多bash脚本)并且我试图找出它是否可能控制exterrnal命令如何显示其输出。

例如,ffmpeg的输出是(对我来说)关于选项,库,流,进度等无关紧要的负载。

我真正想要的是能够选择仅显示带有输入和输出文件名的行,然后每次都在同一行显示进度。同样适用于mkisofs和wodim。

我已经尝试过谷歌搜索,并开始怀疑它是不可能的,或者之前没有人想过它(或者,可能,它是如此明显,没有人认为有必要说:-))。

非常感谢,提前,

David Shaw

1 个答案:

答案 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