Isso falha porque você incluiu $(date ...) em \[ e \] . Remova-os e isso deve funcionar como esperado.
\[ ... \] , no prompt, é usado para informar ao bash que os caracteres dentro não serão adicionados ao tamanho do prompt. Você precisa deste terminal ao redor como escape 3[01;32m , porque isso torna o texto a seguir uma cor diferente, mas esses 8 bytes não serão adicionados ao tamanho do prompt; eles são comidos pelo terminal.
Em uma nota lateral; O bash já pode colocar a data no prompt para você, sem ter que executar o comando date .
PS1='... \D{%a %F %T %Z} ...'
Veja o link