2017-04-07 140 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