2017-04-07 184 views
0

我想檢查命令的輸出並根據輸出運行不同的命令。Bash - 捕獲命令的輸出

count="1" 
for f in "[email protected]"; do 
    BASE=${f%.*} 
# if [ -e "${BASE}_${suffix}_${suffix2}.mp4" ]; then 
    echo -e "Reading GPS metadata using MediaInfo file ${count}/${#@} "$(basename "${BASE}_${suffix}_${suffix2}.mp4")" 
    mediainfo "${BASE}_${suffix}_${suffix2}.mp4" | grep "©xyz" | head -n 1 
    if [[ $? != *xyz* ]]; then 
    echo -e "WARNING!!! No GPS information found! File ${count}/${#@} "$(basename "${BASE}_${suffix}_${suffix2}.mp4")" || exit 1 
    fi 
    ((count++)) 
done 

MediaInfo是我檢查輸出的命令。寫到這 如果一個視頻文件具有「©XYZ」原子輸出看起來是這樣的:

$ mediainfo FILE | grep "©xyz" | head -n 1 
$ ©xyz          : +60.9613-125.9309/ 
$ 

否則是無效

$ mediainfo FILE | grep "©xyz" | head -n 1 
$ 

上面的代碼無法正常工作,甚至當回聲警告©xyz呈現。 任何想法我做錯了什麼?

回答

1

語法您正在使用的捕捉mediainfo命令的輸出是完全錯誤的。當使用grep你可以使用它的返回碼(的$?輸出)直接在IF-條件

if mediainfo "${BASE}_${suffix}_${suffix2}.mp4" | grep -q "©xyz" 2> /dev/null; 
then 
.. 

-q標誌grep指示它沒有拋出任何結果stdout靜默方式運行命令,以及部分2>/dev/null可以抑制通過stderr引發的任何錯誤,所以當字符串存在時您將獲得if-conditional 合格並且如果不存在fail

0

$?是命令的退出代碼:0到255之間的數字。它與stdout無關,您的值「xyz」被寫入。

以匹配標準輸出,你可以用grep

if mediainfo "${BASE}_${suffix}_${suffix2}.mp4" | grep -q "©xyz" 
then 
    echo "It contained that thing" 
else 
    echo "It did not" 
fi