A linha que causa o erro é date =$(date)
, esse erro é enviado para stderr. Nesse estágio, você não está redirecionando o stderr para nenhum lugar. A linha subsequente envia stderr para $ filename, mas não é essa linha que causa o erro.
Uma das maneiras de obter o efeito desejado é executar o script e direcionar o stderr para algum outro lugar ao mesmo tempo.
./myscript 2>> errors.txt
nesse ponto, o arquivo errors.txt conterá seu erro.
Portanto, o problema é que a linha que gera o erro é um erro no próprio script, não um erro causado por um comando externo que o script chama e que tem sua saída redirecionada. ou seja, é a saída de script de nível superior que você precisa redirecionar.