Oczywiście jest to standardowy sposób testowania, czy plik jest pusty test -s FILE
, ale jeden z naszych klientów otrzymał skrypt zawierający takie testy:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
z twierdzeniami dostawcy, że działa w dwóch środowiskach, w których go przetestowali. Nie trzeba dodawać, że zawiodło to w dwóch miejscach, w których go testowałem.
Zainteresowałem się. Kiedy ls -s
drukuje 0
puste pliki?
Oto moje dotychczasowe ustalenia:
- GFS w systemie Linux: 4
- ext4 w systemie Linux: 0
- ZFS w systemie Solaris: 1
- UFS w systemie Solaris: 0
- jfs w systemie AIX: 0
- VxFS w systemie HP-UX: 0
- HFS w systemie HP-UX: 0
- HFS w systemie Mac OS X: 0
Nie badałem jeszcze sieciowych systemów plików.
Pytanie: Jak mogę elegancko wyjaśnić innym, że ich skrypty są nieprawidłowe ?
Moim zdaniem „poprawną” wersją byłoby:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi