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
xterm
como um shell de login :bash -l
. Verifique se/etc/profile
e~/.profile
nã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,
dash
nã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.bashrc
ou~/.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
startx
atéxterm
como shells interativos (bash -i
). Infelizmente isso pode ter algum efeito colateral e eu não faria isso.