2014-03-26 82 views
0

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

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

我真正想要的是能够选择仅显示具有输入和输出文件名的行,然后每次显示同一行上的进度。对于mkisofs和wodim也是如此。

我试过谷歌搜索这个,我开始怀疑,要么是它不可能或没有人想到它(或者,可能,这是如此明显,没有人认为有必要说出:-))。

非常感谢,提前,

大卫·肖

+2

您能否提供一些示例,说明现在的输出结果以及您希望看起来像什么? –

+1

这是非常可能的。尝试使用'sed','awk'或'grep':'bash script.sh | grep ' –

+0

您是否尝试过更改[ffmpeg -loglevel](https://ffmpeg.org/ffmpeg.html)?默认值是*“info - 在处理过程中显示信息性消息,这是警告和错误的补充。”*。你可以把它一直放到*“安静 - 什么都不显示;保持沉默”。* –

回答

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