O problema seria que (grifo meu, do manual do bash ):
% bl0ck_qu0te% Assim, o \[
na saída da sua função chega tarde demais para informar ao Bash que os códigos de controle são seguidos. Você precisa definir PS1
com a saída da função incluída para que isso funcione. Eu sugiro usar PROMPT_COMMAND
assim:
PROMPT_COMMAND='PS1="${debian_chroot:+($debian_chroot)}\[3[01;32m\]\u@\h\[3[00m\]('batPer')-\A:\[3[01;34m\]\w\[3[00m\]\$ "'
Note como as aspas internas são aspas duplas, então cada vez que PS1
é setado, a saída da função é adicionada a ele, e então Bash decodifica PS1
para exibir o prompt.
Nota: com isso, você não precisa echo -e
da saída. Antes, você precisava disso para cores, já que o Bash não estava interpretando depois da expansão da string PS1
. Agora, o Bash decodificará os códigos de controle também.