O shebang está funcionando e o cron não tem nada a ver com isso. Quando um arquivo é executado, se o conteúdo desse arquivo começa com #!
, o kernel executa o arquivo especificado na linha #!
e passa o arquivo original como um argumento.
Seu problema é que você parece acreditar que SHELL
em um script de shell reflete o shell que está executando o script. Este não é o caso. De fato, na maioria dos contextos, SHELL
significa o shell interativo preferido do usuário, ele é destinado a aplicativos como o emulador de terminal para decidir qual shell executar. No cron, SHELL
é a variável que informa ao cron qual programa usar para executar as entradas do crontab (a parte das linhas após as indicações de tempo).
Os shells não definem a variável SHELL
, a menos que ela não esteja definida quando eles são iniciados.
O fato de que SHELL
é /bin/sh
é muito provavelmente irrelevante. Seu script tem uma linha #!/bin/bash
, então é executado por bash. Se você quiser se convencer, adicione ps $$
no script para fazer ps
mostrar informações sobre o shell que está executando o script.