繁体   English   中英

简单的bash / linux单行程,检查PNG是否有效?

[英]Easy one-liner for bash/linux, to check if a PNG is valid?

pngcheck几乎是完美的。 但是在最简单的形式中, pngcheck输出一行以OK:ERROR:开头。 这意味着我必须解析输出字符串,我宁愿只检查一个返回值。

我查看了pngcheck.c源代码,对PNG有效性进行彻底检查是非常严峻的考验 - 远远超过了魔术数字检查。 所以我现在能做的最好的事情就是创建一个简单的pngcheck.sh ,它调用pngcheck并解析输出字符串,然后依次exit 0exit 1

但我想检查一下是否有一个简单或更“b”的解决方案。

谢谢!

看完源代码后我觉得你可以用$? 在许多shell中保存上一个命令的退出状态。 请参阅pngcheck.c中的第4684行,其中打印了成功消息。 如果有错误, global_error将不会设置为0并将被传递给main()并返回。 事情变得容易了:

#!/usr/bin/env sh

if pngcheck "$1" > /dev/null 2>&1
then
    echo things went ok
else
    echo things went bad
fi

用法:

$ ./check-png.sh /usr/share/icons/HighContrast/22x22/status/touchpad-disabled.png
things went ok
$ ./check-png.sh /tmp/FILE
things went bad

当我查看pngcheck.c的源代码(PNGcheck,2007年7月7日的2.3.0版)时,我相信它确实设置了返回码。 接近main()的末尾:

717   if (num_errors > 0)
718     err = (num_errors > 127)? 127 : (num_errors < 2)? 2 : num_errors;
719   else if (num_warnings > 0)
720     err = 1;
...

num_errors是失败的文件数,num_warnings是发出警告的文件数。 然后以“返回错误”退出

所以返回代码为0表示所有ok,1表示仅警告,2或更高表示失败的文件数(最多127)。

这也与我在Ubuntu上安装的二进制文件上做的小测试一致。

pngcheck -q /etc/profile >/dev/null; echo $?    # returns 2
pngcheck -q cpu50.png >/dev/null;  echo $?      # returns 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM