debian: bash 세션 구성 파일의 읽기 순서가 일관되지 않습니다.

debian: bash 세션 구성 파일의 읽기 순서가 일관되지 않습니다.

세 개의 파일을 이 순서대로 읽습니까?

.bash_profile
.profile
.bashrc

터미널을 처음 열면 이런 일이 발생하지 않습니다.

init.log 파일에 첨부된 파일에 추적 명령문이 있습니다. 아래를 봐주세요. 터미널을 연 후 시작됩니다. su 명령 뒤에 로그 위치를 표시하는 주석을 추가했습니다.

stephen@debian:~$ cat init.log
reading .bashrc
done reading .bashrc
stephen@debian:~$ su - stephen
Password: 
stephen@debian:~$ cat init.log
reading .bashrc
done reading .bashrc
#
# after su
#
reading .bash_profile
reading .profile
reading .bashrc
done reading .bashrc
done reading .profile
done reading .bash_profile
stephen@debian:~$ 

따라서 su - login은 예상되는 시퀀스를 트리거하지만 초기 로그인에서는 bashrc만 읽습니다. 이것은 옳을 수 없습니다. 어떤 조건에서 이런 일이 발생하는지 설명할 수 있는 사람이 있습니까? 초기 읽기에 예상되는 모든 파일이 포함되도록 bashrc 및 구성 파일을 수정할 수 있지만 문제의 원인을 찾아 거기에서 수정하는 것이 좋습니다.

답변1

대답은 bash가 세 파일을 모두 찾지만(상황은 약간 다름) 일반적으로 그 중 하나만 실행된다는 것입니다.

실행할 때로그인셸에 로그인 su -하면 시스템 전체에서 실행됩니다 (보통 터미널에 로그인하거나 GNOME 터미널 등을 열 때 또는 를 사용하면 , 또는 처럼 보이고 실행 됩니다)./etc/profile~/.bash_profile~/.bash_login~/.profile첫 번째그것이 찾는 것.

Bash 매뉴얼 페이지에서:

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

bash가 대화형 셸(더 구체적으로는 로그인이 아닌 대화형 셸)로 실행되면 ~/.bashrc이 파일을 읽고 실행합니다.

Bash 매뉴얼 페이지에서:

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

Linux 배포판이 자주 하는 일은 게시 ~/.bash_profile와 파일 ~/.profile~/.bashrc서로 연결하여 파일 간에 설정을 반복하지 않고도 보다 일관된 동작을 가질 수 있도록 하는 것입니다.

예를 들어 Debian의 기본값에는 ~/.profile다음 코드 조각이 포함되어 있습니다.

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

따라서 이는 명시적으로 소스가 제공되므로 ~/.bashrc로그인 및 비로그인 대화형 쉘 모두 이 파일에 추가된 사용자 정의 컨텐츠를 포함합니다.

관련 정보