2014-03-26 113 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