我正在尝试检查命令的输出并根据输出运行不同的命令。
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”原子,则输出如下所示:
$ mediainfo FILE | grep "©xyz" | head -n 1
$ ©xyz : +60.9613-125.9309/
$
否则为空
$ mediainfo FILE | grep "©xyz" | head -n 1
$
上述代码无法正常工作,即使在©xyz出现时也会发出警告。 对我做错了什么想法?
答案 0 :(得分:1)
您使用捕获mediainfo
命令输出的语法是完全错误的。使用grep
时,您可以直接在if条件
$?
的输出)
if mediainfo "${BASE}_${suffix}_${suffix2}.mp4" | grep -q "©xyz" 2> /dev/null;
then
..
-q
中的grep
标志指示它以静默方式运行命令而不将任何结果抛给stdout
,而2>/dev/null
部分则禁止通过{{1}引发的任何错误因此,当字符串存在时,您将获得if条件传递,如果不存在,则获得stderr
答案 1 :(得分:0)
$?
是命令的退出代码:0到255之间的数字。它与stdout无关,你的值是" xyz"是写的。
要在stdout中匹配,您只需使用grep
:
if mediainfo "${BASE}_${suffix}_${suffix2}.mp4" | grep -q "©xyz"
then
echo "It contained that thing"
else
echo "It did not"
fi