Algumas coisas me ocorrem enquanto leio isso.
Se você estiver executando o bash, o valor de $ BASH deve se expandir para o caminho completo e o nome do arquivo do executável bash em uso.
Como você está chamando a data no seu script? Você está chamando-o com o nome completo do caminho ou como "data". O último caso pode resultar no uso de funções, aliases ou o que acontecer de ser o primeiro no caminho, em vez do programa de datas que você espera.
O Bash se comportará de maneira diferente em alguns casos, dependendo do ambiente. Você pode querer despejar o ambiente em um arquivo do script e examiná-lo a partir da linha de comando e do cron. Você pode achar que o PATH é diferente ou que alguma outra variável de ambiente é definida de maneira diferente. Você deve ser capaz de despejar isso em um arquivo em / tmp, colocando uma linha como "env > /tmp/environment.$$" no script. Cada vez que o script é executado, ele imprime o ambiente em um arquivo denominado environment (pid of script)
Você pode definir também o shell para o crontab inteiro para o shell que você quiser usando "SHELL = / path / to / new / shell" em uma linha por si só.