TL; DR : basta colocar a chamada em PS1
em ~/.bashrc
ou chamar subshells com -l
flag
A resposta de Zanna sugere apropriadamente para definir PS1
em ~/.bashrc
como origem de shells interativos.
Você pode, no entanto, usar -l
flag para tratar o subshell como shell de login:
DIR:/xieerqi|04:25|skolodya@ubuntu:
$ echo "PS1='TEST$ '" > ~/.profile
DIR:/xieerqi|04:25|skolodya@ubuntu:
$ bash
xieerqi@eagle:~$ exit
DIR:/xieerqi|04:25|skolodya@ubuntu:
$ bash -l
TEST$
O "Porquê"
Is that normal? Isn't the whole point of exporting a variable to make it accessible from all the child processes forked from that shell? Why it doesn't apply to this stiuation?
Sim, esse é o comportamento esperado. Quando você exporta algo, as variáveis devem se propagar para baixo, para subcamadas.
xieerqi@eagle:~$ export VAR=303
xieerqi@eagle:~$ bash
xieerqi@eagle:~$ echo $VAR
303
xieerqi@eagle:~$ ksh
$ echo $VAR
303
O problema novamente é ~/.bashrc
. O arquivo padrão ~/.bashrc
possui linhas que substituem PS1
. Então, sua variável foi exportada, mas depois usa uma vez o shell interativo% soured~/.bashrc
. O exemplo dessa situação foi observado por a resposta de Gilles em uma das perguntas em Unix Stackexchange .
Quanto a ~/.profile
, na verdade, é incentivado a definir e exportar variáveis de ambiente de lá e é uma prática frequente.
Para responder ao comentário de Zanna sobre o motivo pelo qual o primeiro shell foi colorido, acredito que essa seja a causa:
When bash is invoked as an interactive login shell . . . it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. (from bash man page, emphasis added)
O que aconteceu é que, quando você faz login, bash
encontra ~/.bash_profile
e o origina como o primeiro arquivo encontrado. Os outros shells são shells não-login interativos, então somente ~/.bashrc
é originado depois disso.