pngcheck
几乎是完美的。 但是最简单的forms是, pngcheck
输出一个以OK:
或者ERROR:
开头的行。 这意味着我必须parsing一个输出string,我宁愿只检查一个返回值。
我查看了pngcheck.c
源代码,对PNG的有效性进行了彻底的检查,这是非常糟糕的 – 不仅仅是一个幻数检查。 所以目前我能做的最好的是创build一个简单的pngcheck.sh
,它调用pngcheck
并分析输出string,接着exit 0
或exit 1
。
但是我想检查一下是否有一个简单的或更多的“bashonic”解决scheme。
谢谢!
当我查看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是有警告的文件数。 然后用“return err”退出
因此,所有OK的返回代码为0,仅用于警告1,而2或更高代表失败的文件数(最大127)。
这也与我在Ubuntu上安装的二进制文件的小测试一致。
pngcheck -q /etc/profile >/dev/null; echo $? # returns 2 pngcheck -q cpu50.png >/dev/null; echo $? # returns 0
在看源代码后,我认为你可以使用$?
在许多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