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.