Naturalmente, il modo standard di testare se un file è vuoto è con test -s FILE
, ma uno dei nostri clienti ha ricevuto uno script contenente test come questo:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
con affermazioni da parte del fornitore che funziona nei due ambienti in cui lo hanno testato. Inutile dire che è fallito gravemente in entrambi i due punti in cui l'ho testato.
Quindi, mi sono incuriosito. Quando ls -s
stampa 0
file vuoti?
Questa è la mia scoperta finora:
- GFS su Linux: 4
- ext4 su Linux: 0
- ZFS su Solaris: 1
- UFS su Solaris: 0
- jfs su AIX: 0
- VxFS su HP-UX: 0
- HFS su HP-UX: 0
- HFS su Mac OS X: 0
Non ho ancora esaminato i file system in rete.
Domanda: Come posso spiegare elegantemente agli altri che i loro script sono sbagliati ?
Secondo me, la versione "corretta" sarebbe:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi