X manipula as variáveis de ambiente do prompt?

1

Estou começando com startx . Antes disso, eu tenho PS1 no meu ambiente:

$ cat /proc/self/environ | tr '
$ cat /proc/self/environ | tr '
$ cat /proc/self/environ | tr '
$ cat /proc/self/environ | tr '%pre%' '\n' | egrep '^PS'
PS3=> 
PS4=+ 
' '\n' | egrep '^PS' PS1=[\u@\H \w] PS3=> PS2=> PS4=+
' '\n' | egrep '^PS' PS3=> PS4=+
' '\n' | egrep '^PS' PS1=[\u@\H \w] PS3=> PS2=> PS4=+

De dentro de X , obtenho:

%pre%

Eu verifiquei em GNOME e awesome . É um comportamento esperado? Posso fazer algo sobre isso?

    
por x-yuri 28.02.2015 / 15:13

2 respostas

1

Não, o X não manipula variáveis de ambiente. Mas o bash faz; especificamente, ele remove PS1 e PS2 em shells não interativos:

$ PS1='my PS1' PS2='my PS2' PS3='my PS3' PS4='my PS4' bash -c export |grep PS
declare -x PS3="my PS3"
declare -x PS4="my PS4"

O Bash é provavelmente executado em algum lugar como parte de sua sequência de login. Isso é garantido se o seu /bin/sh é bash e comum, mesmo que não seja.

O prompt é uma configuração de shell, significativa apenas em shells interativos, portanto, não faz sentido exportá-lo para o ambiente. Defina-o como parte do arquivo de inicialização interativo do shell .bashrc .

    
por 01.03.2015 / 03:00
-1

Suponho que você esteja executando bash como seu shell. Se você estiver executando alguma outra coisa, os detalhes irão variar, mas a abordagem permanecerá a mesma. Para confirmar seu shell de login, execute este comando: getent passwd "${USER:-$(id -nu)}" | awk -F: '{print $NF}'

Eu suspeito que o seu prompt esteja definido em .profile ou .bash_profile e esteja definido (uma vez) quando você fizer login no seu terminal. Quando você chama startx e abre um terminal, ele "sabe" que não é uma sessão de login, então chama .bashrc .

Você pode confirmar isso com o seguinte comando, cujo resultado você gostaria de referenciar em sua pergunta: grep '\<PS.*=' .profile .bash_profile .bashrc

Minha recomendação seria configurar seu aplicativo de terminal da GUI para forçar um shell de login (supondo que tal opção exista em sua instalação).

Como alternativa, revise os arquivos .profile , .bash_profile e .bashrc e mova o código de inicialização única para um novo arquivo, como .bash_once , e o código que precisa ser repetido para cada instância de bash para um novo arquivo, como .bash_everytime . Você pode então source .bash_once e source .bash_everytime apropriadamente do .profile ou .bash_profile e .bashrc .

    
por 28.02.2015 / 15:44