Em vez de colocá-lo em PROMPT_COMMAND , coloque-o em PS1 :
PS1='$($HOME/bin/myprompt) \[3[34m\]\$\[3[0m\] '
Quando está em PS1 , bash conta o número de caracteres que são impressos para que ele possa redesenhar corretamente quando você percorre seu histórico. É por isso que o bash tem os caracteres especiais \[ e \] - eles dizem que os caracteres incluídos não são imprimíveis, o que ajuda a descobrir como redesenhar o prompt quando necessário.
Observe que a substituição de comandos está dentro das aspas simples. Isso evita a expansão no momento da atribuição. Se a substituição do comando estivesse entre aspas duplas ou sem aspas, a saída de myprompt seria capturada uma vez no tempo de atribuição e permaneceria estática. Para suportar valores de variáveis que mudam com o tempo, o shell expande o valor de PS1 sempre que o prompt é exibido. Isso significa que a expansão deve ser evitada no tempo de atribuição, citando. Isso também significa que você precisa ter cuidado com a velocidade: se a substituição do comando levar 1 segundo para ser concluída, seu prompt demorará 1 segundo para ser exibido.