세 개의 파일을 이 순서대로 읽습니까?
.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
로그인 및 비로그인 대화형 쉘 모두 이 파일에 추가된 사용자 정의 컨텐츠를 포함합니다.