PS1 쉘 변수의 올바른 위치는 무엇입니까?

PS1 쉘 변수의 올바른 위치는 무엇입니까?

나는 처음부터 임베디드 Linux를 크로스 컴파일하는 것을 보고 있습니다.

일부3.3 "환경 설정", PS1은 에 선언되어 있습니다 .bash_profile.

로 로그인하면 su - clfs둘 다 실행 .bash_profile됩니다 . .bashrc로그인할 때만 실행 su clfs됩니다 ..bashrc

두 경우 모두 PS1은 터미널을 업데이트하지 않습니다.

PS1을 넣으면 .bashrc터미널이 업데이트됩니다.

CLFS 책에 포함되었습니다 .bash_profile.

cat > ~/.bash_profile << "EOF"
exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash
EOF

PS1을 위한 적절한 장소는 어디입니까?

답변1

이것PS1 쉘 변수~/.bashrcbash대화형 셸 세션을 위해 읽은 초기화 파일이므로 셸에 대해 설정해야 합니다 .

참고로 이 변수는쉘 변수는 환경 변수가 아닙니다(하위 프로세스가 해당 값을 상속받는 것은 의미가 없으며 현재 쉘에서만 사용합니다). 따라서 내보내기를 사용할 필요가 없습니다 export.

관련된:

bash쉘의 시작 파일에서 시작할 필요는 없습니다 . ~/.profile실행 중인 시스템에서 로그인 쉘 변경을 허용하지 않는 경우 특정 쉘(또는 로그인 쉘과 관련된 해당 파일)을 시작해야 할 수도 있습니다. 주목해야 할 점아니요다른 쉘이 이미 파일을 실행하고 있으면 다른 쉘을 시작하십시오. 그렇지 않으면 무한 루프에 빠질 수 있습니다.

exec코드에 추가하는 코드는 ~/.bash_profile필요하지 않습니다. 나는 이것이 구문 분석되는 방식이라고 생각합니다 ~/.bashrc(대화형 쉘을 시작한 다음 대화형 bash쉘이 그것을 읽습니다 ~/.bashrc). 더 좋은 방법은 다음과 같이 한 파일 소스를 다른 파일 소스로 사용하는 것입니다 ~/.bash_profile.

if [[ -f $HOME/.bashrc ]]; then
    source "$HOME/.bashrc"
fi

그런 다음 설정하십시오 PS1( 또는 ~/.bashrc를 만질 필요가 없음 ).HOMETERM

이 명령이 수행하는 또 다른 작업은 env -i. 당신이 가지고 있지 않는 한매우 구체적인 이유이러한 이유로 일반 쉘 시작 파일에서는 이 작업을 수행하면 안 됩니다.

답변2

bash에서 인용매뉴얼 페이지:

bash가 이 옵션을 사용하여 대화형 로그인 셸이나 비대화형 셸로 호출되면 --login먼저 파일 /etc/profile(파일이 존재하는 경우)에서 명령을 읽고 실행합니다. 파일을 읽은 후 ~/.bash_profile, ~/.bash_login, 를 순서대로 찾아 존재 ~/.profile하고 읽을 수 있는 첫 번째 파일부터 명령을 읽고 실행합니다. --noprofile이 옵션을 사용하면 쉘이 시작될 때 이 동작을 비활성화할 수 있습니다.

로그인 쉘이 종료되면 bash는 파일이 ~/.bash_logout존재하는 경우 해당 명령을 읽고 실행합니다.

로그인 쉘이 아닌 대화형 쉘을 시작하면 bash는 해당 파일이 존재하는 경우 해당 파일 /etc/bash.bashrc에서 명령을 읽고 실행합니다 ~/.bashrc. --norc이 옵션을 사용하면 이를 억제할 수 있습니다. 이 옵션은 bash가 및 에서 명령을 읽고 실행하도록 합니다.--rcfile filefile/etc/bash.bashrc~/.bashrc

따라서 쉘을 시작하는 방법에 따라 많이 달라집니다.

  • PS1모든 면에서 활발하게 활동하고 싶다면로그인쉘(예: su - <user>telnet 을 통해 로그인할 때 ssh)에 이것을 입력하세요.윤곽.
  • PS1모든 면에서 활발하게 활동하고 싶다면로그인하지 않았습니다쉘(예: 데스크톱 환경에서 다른 터미널을 엽니다.)bashrc.
  • 두 경우 모두 활성화하려면 두 파일 모두에 넣어야 합니다. 또는 (일부 Linux 버전에서는 적어도 시스템 전체에서 이 작업을 수행합니다.)/etc/구성 파일그리고/etc/bash.bashrc),원천.bashrc내부에. 윤곽.

답변3

PS1거기에 있어야합니다 .bashrc. 에서 설정할 수도 있습니다 .profile.

데비안은 거기에서 .bashrc를 얻습니다:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

관련 정보