Obviamente, a maneira padrão de testar se um arquivo está vazio é com test -s FILE
, mas um de nossos clientes recebeu um script contendo testes como este:
RETVAL=`ls -s ./log/cr_trig.log | awk '{print $1}'`
if test $RETVAL -ne 0
then
echo "Badness: Log not empty"
exit 25
fi
com alegações do fornecedor de que ele trabalha nos dois ambientes em que o testaram. Desnecessário dizer que ele falhou muito nos dois locais em que o testei.
Então, fiquei curioso. Quando é que ls -s
imprime 0
para arquivos vazios?
Estas são as minhas descobertas até agora:
- GFS no Linux: 4
- ext4 no Linux: 0
- ZFS no Solaris: 1
- UFS no Solaris: 0
- jfs no AIX: 0
- VxFS no HP-UX: 0
- HFS no HP-UX: 0
- HFS no Mac OS X: 0
Ainda não examinei os sistemas de arquivos em rede.
Pergunta: Como posso explicar elegantemente aos outros que seus scripts estão errados ?
Na minha opinião, a versão "correta" seria:
if test ! -s ./log/cr_trig.log
then
echo "Badness: Log not empty"
exit 25
fi