.bashrc, .bash_profile 및 .environment의 차이점은 무엇입니까?


130

나는 수년간 여러 가지 * nix 기반 시스템을 사용해 왔으며 사용하는 모든 Bash 풍미에는 실행할 시작 스크립트를 결정하는 알고리즘이 다른 것 같습니다. 환경 변수 및 별명 설정 및 시작 메시지 (예 : MOTD) 인쇄와 같은 작업의 목적으로 어떤 시작 스크립트가 적절한 장소입니까?

어떤 물건을 넣어의 차이입니다 .bashrc, .bash_profile그리고 .environment? 나는 또한 같은 다른 파일 본 것 .login, .bash_login등을 .profile; 이것들은 관련이 있습니까? 물리적으로 로그인하고 ssh를 통해 원격으로 로그인하고 새 터미널 창을 열 때 차이점은 무엇입니까? 플랫폼 (Mac OS X (및 Terminal.app) 및 Cygwin Bash 포함)간에 중요한 차이점이 있습니까?

답변:


73

쉘 구성 파일과의 주요 차이점은 일부는 "로그인"쉘만 읽습니다 (예 : 다른 호스트에서 로그인하거나 로컬 UNIX 시스템의 텍스트 콘솔에서 로그인 할 때). 이들은 사용하고있는 쉘에 따라 말 .login하거나 .profile또는 말하는 것 .zlogin입니다.

그런 다음 "대화식"셸에서 읽은 구성 파일이 있습니다 (터미널에 연결된 파일 (예 : 윈도우 시스템에서 실행되는 터미널 에뮬레이터의 경우 의사 터미널)). 같은 .bashrc, .tcshrc, .zshrc, 등

bash점에서이 복잡하게 .bashrc됩니다 만 모두의 쉘 읽을 대화 형비 로그인 당신은 대부분의 사람들이 자신의 이야기 결국 찾을 수 있도록, .bash_profile또한 읽기 .bashrc와 같은 뭔가

[[ -r ~/.bashrc ]] && . ~/.bashrc

다른 쉘은 다르게 동작합니다 (예 : with zsh) .zshrc는 로그인 여부에 관계없이 항상 대화식 쉘에 대해 읽습니다.

bash 매뉴얼 페이지는 각 파일을 읽는 환경을 설명합니다. 예, 일반적으로 시스템간에 동작이 일관됩니다.

.profile단순히로 사용되는 로그인 스크립트 파일 이름 /bin/sh입니다. bash와 일반적으로 이전 버전과 호환되고 /bin/sh, 읽 .profile가있는 경우.


48

간단합니다. 그것은에 설명되어 있습니다 man bash:

/bin/bash
       The bash executable
/etc/profile
       The systemwide initialization file, executed for login shells
~/.bash_profile
       The personal initialization file, executed for login shells
~/.bashrc
       The individual per-interactive-shell startup file
~/.bash_logout
       The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
       Individual readline initialization file

로그인 쉘은 사용자가 로그인 한 것을 읽습니다 (예를 들어 xterm을 시작할 때만 실행되지는 않습니다). 로그인하는 다른 방법이 있습니다. 예를 들어 X 디스플레이 관리자를 사용합니다. 로그인시 환경 변수를 읽고 내보내는 다른 방법이 있습니다.

또한 INVOCATION설명서 의 장을 읽으십시오 . 그것은 말한다 "다음 단락은 떠들썩한 파티가 시작 파일을 실행하는 방법에 대해 설명합니다." , 나는 그것이 spot-on이라고 생각합니다 :) 그것은 "대화식"쉘이 무엇인지 설명합니다.

배쉬는 모른다 .environment. 드라이브의 쉘과 독립적으로 환경 변수를 설정하기 위해 배포판 파일이라고 생각합니다.


1
/etc/bashrc답을 가득 채울 수 있습니까?
Nemoden

9

기본적 ~/.profile으로 Bourne Shell에서 사용되며 아마도 Bash에서 레거시 측정으로 지원 될 수 있습니다. 다시 말하지만, ~/.login~/.cshrcC 쉘에 의해 사용되었다 - 난 확실하지 배쉬 모두에 그들을 사용.

~/.bash_profile로그인 할 때, 한 번 사용됩니다. ~/.bashrc스크립트는 쉘이 시작될 때마다 읽을 수있다. 이것은 /.cshrcC 쉘 과 유사합니다 .

하나 개의 결과는에 그 물건 ~/.bashrc비 로그인 쉘을 시작할 때 오버 헤드를 줄이기 위해 가능한 경량 (최소)로해야합니다.

~/.environment파일이 Korn Shell과 호환되는 파일 이라고 생각합니다 .


7

.bashrc 및 .bash_profile에 대한 정보를 여기 에서 찾았 습니다.

.bash_profile은 로그인 할 때 실행됩니다. 거기에 넣은 것들이 PATH 및 기타 중요한 환경 변수 일 수 있습니다.

.bashrc는 비 로그인 쉘에 사용됩니다. 그게 무슨 뜻인지 잘 모르겠습니다. RedHat은 다른 쉘을 시작할 때마다 (이 사용자의 경우 또는 단순히 bash를 다시 호출 할 때마다) RedHat이 실행한다는 것을 알고 있습니다. 거기에 별칭을 넣을 수도 있지만 다시 그 의미를 잘 모르겠습니다. 나는 그것을 스스로 무시한다.

.profile은 루트의 .bash_profile과 같습니다. 다른 쉘 (csh, sh, tcsh)도 사용할 수 있도록 이름이 변경되었다고 생각합니다. (사용자로서 필요하지 않습니다)

또한 .bash_logout이 실행됩니다. 예, 좋은 추측 ... logout. 당신은 deamons를 중지하거나 심지어 작은 청소를 할 수 있습니다. 로그 아웃 할 때 화면을 지우려면 "클리어"를 추가 할 수도 있습니다.

또한 각 구성 파일에 대한 완전한 후속 조치가 있습니다.

이것들은 아마도 배포판에 따라 다를 수 있습니다. 모든 배포판이 각각의 구성을 갖도록 선택하는 것은 아니며 일부는 더 많이 있습니다. 그러나 이름이 같으면 보통 같은 내용을 포함합니다.


4

Josh Staiger 에 따르면 Mac OS X의 Terminal.app은 실제로 각 새 터미널 창에 대해 기본적으로 비 로그인 쉘이 아닌 로그인 쉘을 실행하며 .bashrc 대신 .bash_profile을 호출합니다.

그는 추천한다 :

대부분의 경우 로그인 및 비 로그인 셸에 대해 두 개의 개별 구성 파일을 유지 관리하지 않으려 고합니다. PATH를 설정할 때 둘 다에 적용하기를 원합니다. .bash_profile 파일에서 .bashrc를 가져온 다음 PATH 및 공통 설정을 .bashrc에 넣으면이 문제를 해결할 수 있습니다.

이렇게하려면 .bash_profile에 다음 행을 추가하십시오.

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi

이제 콘솔에서 컴퓨터에 로그인하면 .bashrc가 호출됩니다.


2

볼만한 곳은 bash의 맨 페이지입니다. 여기에 '온라인 버전이야. "INVOCATION"섹션을 찾으십시오.


0

나는 RHEL 파생물이 전에 실행되는 반면 실행 .profile되지 .bash_profile는 않지만 Debian-family 배포판을 사용했습니다 ..bash_profile.profile

Linux OS에서 작동하도록 환경 변수를 설정해야 할 때 혼란스러워 보입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.