Os comandos env e export listam apenas variáveis que são exportadas. $PS1 geralmente não é exportado. Experimente echo $PS1 no seu shell para ver o valor real de $PS1 .
Os shells não interativos geralmente não têm $PS1 . Non-interactive bash explicitamente não recupera $PS1 . 1 Você pode verificar se bash é interativo por echo $- . Se a saída contiver i , ela será interativa. Você pode iniciar explicitamente o shell interativo usando a opção na linha de comando: bash -i . O shell iniciado com -c não é interativo.
O /etc/profile script é lido para um shell de login. Você pode iniciar o shell como um shell de login por: bash -l .
Com bash shell, os scripts /etc/bash.bashrc e ~/.bashrc geralmente são usados para definir $PS1 . Esses scripts são originados quando o shell interativo de não-login é iniciado. Este é o seu caso no xterm . Veja Definindo o PS? Strings permanentemente
Soluções possíveis
-
Inicie o shell dentro de
xtermcomo um shell de login :bash -l. Verifique se/etc/profilee~/.profilenão contêm código que deve ser executado somente após o login. Talvez pequenas modificações dos scripts sejam necessárias. -
Use um shell diferente. Por exemplo,
dashnão desabilita$PS1. Você pode usar um shell desse tipo, da mesma forma que o shell não interativo, que executará os scripts atéxterm. -
Desista da estrita conformidade com POSIX e use o local padrão da bash para definir
$PS1:/etc/bash.bashrcou~/.bashrc. -
Desista da conformidade estrita do POSIX e crie seu próprio script de inicialização como:
bash --rcfile <(echo "PS1=$PS1save") -i -
Inicie os shells intermediários de
startxatéxtermcomo shells interativos (bash -i). Infelizmente isso pode ter algum efeito colateral e eu não faria isso.