Evite o ~ no script, use o caminho completo do diretório. Não só existe outro interpretador de scripts em execução (traço em vez de bash) que não entende a convenção ~, o script está sendo executado como root, assim, mesmo se ~ foi entendido, seria o diretório inicial errado.