Tất nhiên, cách kiểm tra tiêu chuẩn nếu một tệp trống test -s FILE
, nhưng một trong những khách hàng của chúng tôi đã nhận được một tập lệnh chứa các kiểm tra như thế này:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
với tuyên bố từ nhà cung cấp rằng nó hoạt động trong hai môi trường mà họ đã thử nghiệm. Không cần phải nói, nó đã thất bại nặng nề ở cả hai nơi mà tôi đã thử nghiệm.
Vì vậy, tôi đã tò mò. Khi nào ls -s
in 0
cho các tập tin trống?
Đây là phát hiện của tôi cho đến nay:
- GFS trên Linux: 4
- ext4 trên Linux: 0
- ZFS trên Solaris: 1
- UFS trên Solaris: 0
- jfs trên AIX: 0
- VxFS trên HP-UX: 0
- HFS trên HP-UX: 0
- HFS trên Mac OS X: 0
Tôi chưa kiểm tra các hệ thống tập tin mạng.
Câu hỏi: Làm thế nào tôi có thể giải thích một cách tao nhã cho những người khác rằng kịch bản của họ sai ?
Theo tôi, phiên bản "chính xác" sẽ là:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi