Bash 설정 파일들...
여러 셸 중에서 가장 많이 이용되고 있는 셸이라면 단연 Bash 일 것이다. Bash 를 쓰다보면 자주 쓰는 alias 나 환경 변수들을 따로 저장해 둘 필요가 생긴다. 그런데 셸의 실행 형태에 따라 읽어 들이는 설정 파일이 다르다. 이를 모르면 아무리 설정 파일을 바꾸더라도 원하는 결과를 얻지 못하고 좌절할 수 있다. ㅠㅠ
셸은 크게 세 가지 형태로 실행된다. 첫째는 interactive login shell 이고, 둘째는 interactive non-login shell, 셋째는 non-interactive shell 이다. 각각 어떤 경우에 해당되는지, 그리고 어떤 설정 파일을 읽어 들이는지 살펴보자.
어떤 시스템에 접속해서 shell 의 prompt 를 보기 위해서는 id 와 password 를 입력하는데, 이렇게 접속했을 때 실행되는 shell 이 interactive login shell 이다. interactive login shell 의 경우, /etc/profile 을 읽은 후 ~/.bash_profile 을 읽고 ~/.bash_login 과 ~/.profile 을 읽는다.
어떤 작업을 하다 보면 또 다른 셸을 실행시킬 필요가 있다. 이렇게 실행되는 셸이 interactive non-login shell 이다. 간단히 말해서 시스템에 접속한 후에 새로 실행시키는 셸들을 말한다. 이 interactive non-login shell 은 부모 환경을 그대로 물려받고, ~/.bashrc 를 읽는다.
터미널에서 가장 많이 하는 작업 중의 하나는 스크립트를 실행 시키는 것이다. 이 때 스크립트를 실행시킬 때 작동하는 셸이 non-interactive shell 이다. 이 non-interactive shell 부모 환경만 물려받고, 별도의 파일을 읽지 않지만, BASH_ENV 환경 변수가 설정되어 있다면 BASH_ENV 가 가리키는 파일을 읽는다. 예를 들어,
라고 했다면, non-interactive shell 이 실행될 때 ~/.bash_env_rc 파일을 읽는다.
bash 가 sh 로 실행되면, bash 는 전통적인 sh 의 형태를 따라한다. 만일 interactive login shell 이라면 /etc/profile 을 읽고 ~/.profile 을 읽는다. interactive shell 이라면 ENV 환경변수가 가리키는 파일을 읽는다. non-interactive shell 의 경우 어떤 설정 파일도 읽지 않는다.
대표적인 remote shell daemon 은 rshd 이나 sshd 가 있는데, 이들이 bash 를 실행시키면 bash 는 ~/.bashrc 파일을 읽는다. 하지만 remote shell daemon 이 bash 를 sh 로 실행시키면 ~/.bashrc 파일을 읽지 않는다.
보다 자세한 것은 다음 Bash 매뉴얼을 보기 바란다.
셸 의 실행 형태
셸은 크게 세 가지 형태로 실행된다. 첫째는 interactive login shell 이고, 둘째는 interactive non-login shell, 셋째는 non-interactive shell 이다. 각각 어떤 경우에 해당되는지, 그리고 어떤 설정 파일을 읽어 들이는지 살펴보자.
interactive login shell
어떤 시스템에 접속해서 shell 의 prompt 를 보기 위해서는 id 와 password 를 입력하는데, 이렇게 접속했을 때 실행되는 shell 이 interactive login shell 이다. interactive login shell 의 경우, /etc/profile 을 읽은 후 ~/.bash_profile 을 읽고 ~/.bash_login 과 ~/.profile 을 읽는다.
interactive non-login shell
어떤 작업을 하다 보면 또 다른 셸을 실행시킬 필요가 있다. 이렇게 실행되는 셸이 interactive non-login shell 이다. 간단히 말해서 시스템에 접속한 후에 새로 실행시키는 셸들을 말한다. 이 interactive non-login shell 은 부모 환경을 그대로 물려받고, ~/.bashrc 를 읽는다.
non-interactive shell
터미널에서 가장 많이 하는 작업 중의 하나는 스크립트를 실행 시키는 것이다. 이 때 스크립트를 실행시킬 때 작동하는 셸이 non-interactive shell 이다. 이 non-interactive shell 부모 환경만 물려받고, 별도의 파일을 읽지 않지만, BASH_ENV 환경 변수가 설정되어 있다면 BASH_ENV 가 가리키는 파일을 읽는다. 예를 들어,
export BASH_ENV=~/.bash_env_rc
라고 했다면, non-interactive shell 이 실행될 때 ~/.bash_env_rc 파일을 읽는다.
bash 가 sh 로 실행될 때
bash 가 sh 로 실행되면, bash 는 전통적인 sh 의 형태를 따라한다. 만일 interactive login shell 이라면 /etc/profile 을 읽고 ~/.profile 을 읽는다. interactive shell 이라면 ENV 환경변수가 가리키는 파일을 읽는다. non-interactive shell 의 경우 어떤 설정 파일도 읽지 않는다.
bash 가 remote shell daemon 을 통해 실행될 때
대표적인 remote shell daemon 은 rshd 이나 sshd 가 있는데, 이들이 bash 를 실행시키면 bash 는 ~/.bashrc 파일을 읽는다. 하지만 remote shell daemon 이 bash 를 sh 로 실행시키면 ~/.bashrc 파일을 읽지 않는다.
보다 자세한 것은 다음 Bash 매뉴얼을 보기 바란다.
댓글
댓글 쓰기