Tentu saja, cara standar pengujian jika file kosong adalah dengan test -s FILE
, tetapi salah satu klien kami telah menerima skrip yang berisi tes seperti ini:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
dengan klaim dari pemasok bahwa ia bekerja di dua lingkungan yang telah mereka uji. Tidak perlu dikatakan, itu gagal parah di kedua tempat saya mengujinya.
Jadi, saya jadi penasaran. Kapan ls -s
mencetak 0
untuk file kosong?
Ini temuan saya sejauh ini:
- GFS di Linux: 4
- ext4 di Linux: 0
- ZFS pada Solaris: 1
- UFS di Solaris: 0
- jfs di AIX: 0
- VxFS di HP-UX: 0
- HFS pada HP-UX: 0
- HFS pada Mac OS X: 0
Saya belum memeriksa sistem file jaringan.
Pertanyaan: Bagaimana saya bisa menjelaskan dengan elegan kepada yang lain bahwa skrip mereka salah ?
Menurut pendapat saya, versi "yang benar" adalah:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi