O script é desnecessariamente complicado. Você poderia fazer:
croncmd='5 1 * * * sudo /usr/local/sbin/mysqlFullBackup.sh > /var/log/mysql/mysqlFullBackupCron.log 2>&1'
if ! crontab -l | egrep -v '^(#|$)' | grep -Fq "$croncmd"
then
( crontab -l; echo "$croncmd" ) | crontab -
fi
Quando você executa echo $(crontab -l; echo "$croncmd")
, sem nenhuma aspas, o conteúdo será submetido à expansão de divisão de campo e curinga quando o shell o expandir. Portanto, qualquer *
será expandido para os nomes de arquivos no diretório atual, por exemplo:
$ echo $(echo "*")
bin Desktop dev Documents Downloads examples.desktop Music Pictures Public snap Templates Videos
É mais fácil e simples usar um comando composto - ( crontab -l; echo "$croncmd" )" and send the output to
crontab 'diretamente, sem usar um eco adicional.
Também com grep
, você não deseja que o grep trate 5 1 *
como uma expressão regular, então use a opção -F
.