Звичайно, стандартний спосіб тестування, якщо файл порожній, є 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
для порожніх файлів?
Це мої висновки поки що:
- GFS в Linux: 4
- ext4 в Linux: 0
- ZFS на Solaris: 1
- UFS на Solaris: 0
- jfs на AIX: 0
- VxFS на HP-UX: 0
- HFS на HP-UX: 0
- HFS на Mac OS X: 0
Я ще не вивчив мережеві файлові системи.
Питання: Як я можу вишукано пояснити іншим, що їхні сценарії неправильні ?
На мою думку, "правильною" версією було б:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi