Eu sei que é possível personalizar o prompt (conforme detalhado na seção 6.9 Controlando o Prompt do manual do Bash) e já fiz isso por um tempo, mas recentemente notei um comportamento estranho.
Considere os dois cenários a seguir:
Sem sequências de escape
PS1='\$ '
PS2='> '
PS3='#? '
PS4='+ '
Com sequências de fuga
PS1='\[\e[1;34m\]\$\[\e[0m\] '
PS2='\[\e[1;34m\]>\[\e[0m\] '
PS3='\[\e[1;34m\]#?\[\e[0m\] '
PS4='\[\e[1;34m\]+\[\e[0m\] '
Então, os problemas são:
PS3
é impresso como está , sem interpretar as sequências de escape.PS4
nem é impresso.
Tenho certeza de que eles costumavam funcionar antes, mas como não os uso com muita frequência, não tenho ideia de quando eles estão se comportando mal.
Detalhes técnicos
- SO: Ubuntu 16.04.4
- Shell: Bash 4.3.48(1)-lançamento
- Emulador de terminal: GNOME Terminal 3.18.3 (mas também acontece em terminais virtuais)
- Não houve nenhuma atualização do Bash desde que o sistema foi instalado (2017-06-09), até onde eu sei.
De
man bash
:Portanto, por qualquer motivo, a não expansão
PS3
é um comportamento documentado.Quanto a
PS4
você precisa exportar a variável para disponibilizá-la em uma nova invocação dobash
. E você precisa definir a opção de rastreamento explicitamente,-v
não ative:Do
bash
manual:A definição de
PS3
não indica que é expandida da mesma maneira que as outras strings de prompt. O comportamento que você vê é consistente com a documentação.