A interceptação DEBUG
é executada antes de cada comando, portanto, você pode abusar dela para redefinir as cores, caso tenha colorido a entrada da linha de comando. ("abuso", já que isso não está depurando).
Com isso:
$ promptcol="$(tput sgr0)$(tput setaf 3)"
$ cmdcol="$(tput sgr0)$(tput bold)"
$ normalcol="$(tput sgr0)"
$ trap 'echo -n "$normalcol"' DEBUG
$ PS1="\[$promptcol\]\w\$ \[$cmdcol\]"
Eu entendo isso:
Observequevocêprecisado\[...\]
emtornodoscódigosdecores,paraqueoshellsaibacomocalcularalarguradopromptcorretamente.Alémdisso,\[...\]
dentro das variáveis , o shell lida com o prompt escapa primeiro e expansões variáveis somente depois disso.