Bien sûr, la façon standard de tester si un fichier est vide est avec test -s FILE
, mais l'un de nos clients a reçu un script contenant des tests comme celui-ci:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
avec les affirmations du fournisseur selon lesquelles il fonctionne dans les deux environnements dans lesquels ils l'ont testé. Inutile de dire qu'il a mal échoué aux deux endroits où je l'ai testé.
Alors, je suis devenu curieux. Quand ls -s
imprime-t-on 0
pour les fichiers vides?
Voici mes conclusions jusqu'à présent:
- GFS sur Linux: 4
- ext4 sous Linux: 0
- ZFS sur Solaris: 1
- UFS sur Solaris: 0
- jfs sur AIX: 0
- VxFS sur HP-UX: 0
- HFS sur HP-UX: 0
- HFS sur Mac OS X: 0
Je n'ai pas encore examiné les systèmes de fichiers en réseau.
Question: Comment puis-je expliquer avec élégance aux autres que leurs scripts sont faux ?
À mon avis, la version "correcte" serait:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi