Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash-捕获命令的输出_Bash - Fatal编程技术网

Bash-捕获命令的输出

Bash-捕获命令的输出,bash,Bash,我试图检查命令的输出,并根据输出运行不同的命令 count="1" for f in "$@"; do BASE=${f%.*} # if [ -e "${BASE}_${suffix}_${suffix2}.mp4" ]; then echo -e "Reading GPS metadata using MediaInfo file ${count}/${#@} "$(basename "${BASE}_${suffix}_${suffix2}.mp4")" medi

我试图检查命令的输出,并根据输出运行不同的命令

count="1"
for f in "$@"; 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”atom,则输出如下所示:

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

$ mediainfo FILE | grep "©xyz" | head -n 1
$
上述代码不起作用,即使出现©xyz,也会回显警告。
知道我做错了什么吗?

$?
是命令的退出代码:一个介于0和255之间的数字。它与stdout无关,在stdout中写入值“xyz”

要在标准输出中匹配,您可以使用
grep

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

您使用的
mediainfo
命令的捕获输出语法完全错误。使用
grep
时,可以直接在if条件中使用其返回代码(输出
$?

if mediainfo "${BASE}_${suffix}_${suffix2}.mp4" | grep -q "©xyz" 2> /dev/null; 
then
..
grep
中的
-q
标志指示它以静默方式运行命令,而不会将任何结果抛出到
stdout
,而
2>/dev/null
部分会抑制通过
stderr
抛出的任何错误,因此当字符串存在时,您将获得if条件传递,如果字符串不存在,则获得
失败