当然,测试文件是否为空的标准方法是使用test -s FILE
,但是我们的一位客户已收到包含以下测试的脚本:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
供应商声称它可以在他们测试过的两个环境中工作。不用说,它在我测试过的两个地方都严重失败。
所以,我很好奇。什么时候ls -s
打印0
空文件?
到目前为止,这是我的发现:
- Linux上的GFS:4
- Linux上的ext4:0
- Solaris上的ZFS:1
- Solaris上的UFS:0
- AIX上的jfs:0
- HP-UX上的VxFS:0
- HP-UX上的HFS:0
- 在Mac OS X上的HFS:0
我还没有检查过网络文件系统。
问:我如何才能优雅地向其他人解释他们的脚本是错误的?
我认为“正确”的版本是:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi