X mangle은 환경 변수를 묻는 메시지를 표시합니까?

X mangle은 환경 변수를 묻는 메시지를 표시합니까?

나는 startx. 그 전에는 다음이 PS1있었습니다.

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

그것으로부터 X나는 다음을 얻는다:

$ cat /proc/self/environ | tr '\0' '\n' | egrep '^PS'
PS3=> 
PS4=+ 

나는 체크인 GNOME했고 awesome. 이것이 예상되는 동작입니까? 내가 할 수 있는게 있습니까?

답변1

아니요, X는 환경 변수를 파괴하지 않습니다. 그러나 bash는 특히 비대화형 쉘에서 설정을 해제합니다 PS1.PS2

$ 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"

Bash는 아마도 로그인 시퀀스의 일부로 어딘가에서 실행될 것입니다. 당신 /bin/sh이 bash이고 그것이 일반적이라면, 그렇지 않더라도 이것이 보장됩니다.

프롬프트는 대화형 셸에서만 의미가 있는 셸 설정이므로 환경으로 내보낼 필요가 없습니다. 이것을 쉘의 대화형 초기화 파일의 일부로 설정하십시오 .bashrc.

답변2

나는 당신이 bash쉘로 실행되고 있다고 가정합니다. 다른 것을 실행하는 경우 세부 사항은 다르지만 접근 방식은 거의 동일하게 유지됩니다.로그인 셸을 확인하려면 다음 명령을 실행하세요.getent passwd "${USER:-$(id -nu)}" | awk -F: '{print $NF}'

.profile귀하의 프롬프트 가 또는에 정의되어 .bash_profile있고 터미널에 로그인할 때 (한 번) 설정된 것 같습니다 . 터미널을 호출 startx하고 열면 이것이 로그인 세션이 아니라는 것을 "알고" 호출합니다 .bashrc.

다음 명령을 사용하여 이를 확인할 수 있으며 그 결과를 질문에 인용할 수 있습니다.grep '\<PS.*=' .profile .bash_profile .bashrc

내 제안은 로그인 셸을 강제 실행하도록 GUI 터미널 응용 프로그램을 구성하는 것입니다(이러한 옵션이 설치에 존재한다고 가정).

.profile또는 파일을 확인하고 .bash_profile일회성 .bashrc시작 코드(예:)를 새 파일로 이동하고 .bash_once새 파일의 모든 인스턴스에 대해 반복해야 하는 코드(예:)를 이동합니다. 그런 다음 이제 비어 있거나 적절하게 시작할 수 있습니다.bash.bash_everytimesource .bash_oncesource .bash_everytime.profile.bash_profile.bashrc

관련 정보