.bash_profile과 .bashrc의 차이점은 무엇입니까?


245

OS X에서 터미널의 별칭을 만들려면 .bash_profile또는에 별칭을 넣을 수 있습니다 .bashrc. 둘의 차이점은 무엇이며 왜 다른 하나가 아닌 다른 하나에 별칭을 넣을까요?


5
유닉스 지식을 여기에서 권장하지는 않지만 bash는 순수한 유닉스 짐승이므로 파트너 사이트에서 더 나은 지식을 얻 거나이 질문에 여러 번 대답 할 수 있습니다. 유닉스
bmike

.profile도 있습니다 ... Stack Overflow 에서이 질문 을 참조하십시오 .
Yaakov Baruch

2
당신이 경우 brew install bash와는 iTerm2를 사용, 당신은 설정할 수 profile -> command/usr/local/bin/bash로드 된 .bashrc후, 기본적으로 .bash_profile. 이것은 또한 당신에게 배쉬 4 케이크를 제공합니다 ...
Ray Foss

.bashrc가 몇 년 동안 사용되지 않았다고 들었고 기본적으로 작동하지 않으며 .bash_profile은 macosx의 것입니다. 그리고 나는 .bashrc를 시도했지만 t는 나를 위해 작동하지 않았지만 .bash_profile은
11시

답변:


247

.bash_profile.bashrc대화 형 비 로그인 셸에 대해 실행되는 동안 로그인 셸에 대해 실행됩니다.

콘솔을 통해 로그인 할 때 (시스템에 앉아 있거나 ssh :를 통해 원격으로) .bash_profile초기 명령 프롬프트 전에 쉘을 구성하기 위해 실행됩니다.

그러나 이미 컴퓨터에 로그인하여 새 터미널 창 (xterm)을 열면 .bashrc창 명령 프롬프트 전에 실행됩니다. 터미널 .bashrc에 입력하여 새 bash 인스턴스를 시작할 때도 실행됩니다 /bin/bash.

OS X에서 터미널은 기본적으로 매번 로그인 쉘을 실행하므로 대부분의 다른 시스템과 약간 다르지만 환경 설정에서 구성 할 수 있습니다.


57
On OS X, Terminal by default runs a login shell every time-나는 이것을 깨닫지 못해 항상 혼란스러워했습니다. 좋은 정보!
vaughan

1
@Alex, 왜 OS X 터미널이 매번 로그인 쉘을 실행합니까?
Pacerier

17
'일부 Apple 개발자는 원래 차이를 인식하지 못했으며 이제는 점보 점보에 숨겨져 있습니다.
Snowcrash

2
나는 OS X에 있고 bash 대신 zshell을 사용하고 Terminal 대신 iTerm을 사용합니다. 대답과 다른 터미널과 다른 쉘을 사용하고 있음에도 불구하고 OS X .zprofile는 매번 실행 되므로 로그인 쉘을 모두 고려하는 것으로 보입니다 .
Adam Zerner

1
로그인 / 비 로그인 및 대화식 / 비 대화식 쉘의 조합에 대한 자세한 설명을 원하고 이러한 구성 파일을 실행할 때 unix.stackexchange.com/a/46856/38715
kevinmicke

45

.bashrc"일반적인"터미널이 보이는 동안 X11은 당신 을 볼 것입니다.bash_profile

그러나에 다음을 추가하면 .bash_profile모든 것을 .bashrc파일 로 이동하여 모든 것을 두 곳이 아닌 한 곳으로 통합 할 수 있습니다 .

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

아니면 그냥 할 수 있습니다 cd ~ ; ln -s .bashrc .bash_profile.
lhf

5
이 2 개의 구성 파일은 명확하게 분리 된 기능을 가지고 있습니다. 경우에 따라 세션이 시작될 때 초기화해야 할 부분이 있어야합니다 ( ~/.bash_profile). 또한 모든 셸 수준 ( ~/.bashrc) 에서 증분을 정의해야하는 경우가 종종 있습니다. 이 자유를 억제하는 것이 좋습니다.
dan

3
@danielAzuelos : Lurch는이 부분을 제외했지만 ~/.bash_profile모든 새 창 / 탭에 대해 OS X 터미널 소스 를 제공하므로 터미널에 관한 한 두 가지를 분리 할 수있는 방법은 없습니다.
mipadi

14
@mipadi 그것들을 분리하는 것은 여전히 ​​가치가있다. 예를 들어 .bash_profile자식 프로세스에서 다시 소스를 제공 할 수 없습니다. 중첩 된 배쉬 소스의 모든 수준은 .bashrc당신이 좋아하는 뭔가를 넣어 경우, 그래서 export A=a:$A에서 .bashrc, 당신은 $A중첩 된 배쉬에서 더 이상 얻을 것이다. 나는 일반적으로 환경 변수를 프로파일에두고 별칭은 RC에 둡니다.
Franklin Yu

@FranklinYu 많은 사람들에게 그다지 큰 거래는 아니지만 전적으로 동의합니다! 사람들을 생각 나게하고 더 많은지지를받을 가치가있는 것은 훌륭한 기술적 포인트입니다.
Subfuzion

24

macOS의 경우 .bash_profile모든 것을 통합 하기 위해 넣을 코드 .bashrc는 다음과 같습니다.

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

이것은 Mac 터미널 사용자에게 더 구체적입니다.


6
사실이지만 이것은 2012의 Lurch 답변과 어떻게 다릅니 까?
Arjan

0

TLDR; .bash_profile별명에 사용 하십시오.

서로 다른 초기화 파일이 함께 작동하는 방식은 조금 더 복잡하며 OSX에는 몇 가지 중요한 특수 사례가 있습니다. 주요 내용은 다음과 같습니다.

  • Bash는 모든 플랫폼에서 호출 방법에 따라 여러 파일 중 하나를 실행합니다. 자세한 내용은 여기에 있습니다 .
  • OSX의 터미널 앱은 비표준적인 작업을 수행합니다. 마치 로그인 쉘인 것처럼 모든 새 탭이나 창을 만듭니다 .bash_profile. 따라서 위의 TLDR 조언.
  • .bashrc또한 옵션입니다,하지만 (즉, 호출은 서브 쉘을 만들 때마다 호출 될 것이다 bash당신이 그 안에 변수를 업데이트 할 경우 비 효율성을 만들 수있는,) (예 PATH=/bin/foo:$PATH)
  • 터미널이 내장 된 다른 앱은 터미널 앱의 규칙을 따르도록 선택할 수 있습니다. 특히 Visual Studio Code는 기본적으로 그렇지 않습니다 .
  • GUI를 통해 호출 된 앱은 셸에서 생성되지 않습니다. 따라서 환경 변수를 볼 수있는 여러 가지 경쟁 메커니즘이 있으며, 이는 수년에 걸쳐 변경되었습니다 .
  • 호출 .bashrc하는 스 니펫 .bash_profile은 매우 일반적입니다. 나는 그것을 권장하지 않지만 선호합니다.

.bash_profile별칭에 정확하게 사용 하는 이유는 무엇 입니까? 당신이 부분적으로 만 나열한 항목은 별명에 관한 것이므로, 그것이 복잡해 보이는지를 설명 할 수있는 글 머리 기호를 나열하는 대신, 이러한 제약 조건 내에서 더 쉽게 만드는 방법을 제안 할 수 있습니까?
nohillside

너의 의도를 알 겠어. .bash_profile을 사용하는 것이 복잡한 것은 아닙니다. 파일이 호출되는 방식이 복잡합니다. 업데이트하겠습니다.
레오

GNU bash 매뉴얼에서 .bash_profile에서 .bashrc를 호출하는 것이 좋습니다. 그렇지 않으면 로그인 쉘과 비 대화식 모두에 필요한 변수 등을 어떻게 설정합니까?
마크

다른 OS에서 사용하는 모든 터미널 에뮬레이터에는 로그인 쉘, xterm 및 Xfce로 새 창을 실행하여 두 개의 이름을 지정할 수있는 옵션이 있습니다.
fd0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.