Конечно, стандартным способом проверки, если файл пуст, является 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 на Солярисе: 1
- UFS на Солярисе: 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