Eu tenho um script que testa se as atualizações no meu servidor 14.04 estão disponíveis e me envia uma mensagem de texto se isso acontecer.
O script bash começa com:
IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
E depois testa:
if [ $updates != 0 ];
then
…
e mais tarde:
if [ $security_updates != 0 ];
then
O problema é updates
e security_updates
devem conter o número de atualizações como 3
e 1
. Mas às vezes, o primeiro comando falha e retorna:
E: Unknown Error: '<class 'SystemError'>' (E:Could not open file /var/lib/apt/lists/ubuntu.mirrors.ovh.net_ftp.ubuntu.com_ubuntu_dists_trusty-backports_universe_i18n_Translation-en - open (2: No such file or directory), E:Could not open file /var/lib/apt/lists/ubuntu.mirrors.ovh.net_ftp.ubuntu.com_ubuntu_dists_trusty-backports_restricted_i18n_Translation-en - open (2: No such file or directory), E:Could not open file /var/lib/apt/lists/ubuntu.mirrors.ovh.net_ftp.ubuntu.com_ubuntu_dists_trusty-backports_multiverse_i18n_Translation-en - open (2: No such file or directory), E:Could not open file /var/lib/apt/lists/ubuntu.mirrors.ovh.net_ftp.ubuntu.com_ubuntu_dists_trusty-backports_main_i18n_Translation-en - open (2: No such file or directory), E:Could not open file /var/lib/apt/lists/ubuntu.mirrors.ovh.net_ftp.ubuntu.com_ubuntu_dists_trusty-backports_multiverse_binary-i386_Packages - open (2: No such file or directory), E:Could not open file /var/lib/apt/lists/ubuntu.mirrors.ov
h.net_ftp.ubuntu.com_ubuntu_dists_trusty-backports_universe_binary-i386_Packages - open (2: No such file or directory),
Como resultado, meu script falha e o cron me envia um e-mail.
Como posso testar erros antes de testar o conteúdo das próprias variáveis? $?
não ajuda…
EDITAR:
Eu também tentei:
s="${updates}"
size=${#s}
if [[ $size > 3 ]] ;then
echo "DATA TOO LARGE";
exit;
fi
Na maioria das vezes, isso não detecta que a string é muito longa ... Às vezes, fico com dados muito grandes, às vezes recebo os erros
line 25: [: too many arguments
= > essa é a linha da primeira declaração if
line 38: [: !=: unary operator expected
= > essa é a linha da segunda instrução if