pngcheck几乎是完美的。但在最简单的形式中,pngcheck输出以OK:or 或开头的行ERROR:。这意味着我必须解析一个输出字符串,而我宁愿只检查一个返回值。
我查看了pngcheck.c源代码,彻底检查 PNG 的有效性是一种考验 - 不仅仅是一个神奇的数字检查。所以目前我能做的最好的事情就是创建一个简单的pngcheck.sh调用pngcheck和解析输出字符串,然后是exit 0orexit 1相应的。
但我想检查是否有一个简单或更“bashonic”的解决方案。
谢谢!
查看源代码后,我认为您可以$?
在许多 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
Run Code Online (Sandbox Code Playgroud)
用法:
$ ./check-png.sh /usr/share/icons/HighContrast/22x22/status/touchpad-disabled.png
things went ok
$ ./check-png.sh /tmp/FILE
things went bad
Run Code Online (Sandbox Code Playgroud)
小智 4
当我查看 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;
...
Run Code Online (Sandbox Code Playgroud)
num_errors 是失败的文件数,num_warnings 是有警告的文件数。然后它退出并显示“return err;”
因此,返回代码为 0 表示一切正常,1 表示仅出现警告,2 或更高表示失败的文件数(最多 127)。
这也与我对 Ubuntu 上安装的二进制文件所做的小测试一致。
pngcheck -q /etc/profile >/dev/null; echo $? # returns 2
pngcheck -q cpu50.png >/dev/null; echo $? # returns 0
Run Code Online (Sandbox Code Playgroud)