.bashrc가 자동으로 실행되지 않는 이유는 무엇입니까?


202

.bashrc새 터미널 창을 열 때마다로드 될 수 있도록 파일에 별칭 명령을 넣었습니다 . 그러나 이것은 일어나지 않습니다.

run script:터미널> 환경 설정> " MyDefaultTheme "> 쉘 사전 설정에서 선택 하고 추가해야합니다 : source .bashrc && clear작동하려면 ...

많은 튜토리얼에서 .bashrc파일 에 추가해야한다고 말하면 모두 이상해 보입니다 .

bash터미널을 사용할 때 실행되지 않습니다 . 다른 (기본) 하나를 좋아합니다 (무엇인지 알지 못합니다).

>>d54c6b47b:~ romeo$

대신에:

>>bash$

bash에는 모든 것이로드되어야합니다.

내 질문은 왜 .bashrc파일이 자동으로로드 되지 않았으며 매번 호출하는 옵션을 추가해야 했습니까?

또한 일부 자습서는 다음과 같은 작업을 수행하도록 지시했습니다.

$alias la=’ls -la >> ~/.bashrc

내 별칭을 써야합니다 .bashrc. 이것도 작동하지 않습니다 ...

저는 유닉스 초보자이므로 조심하십시오.


나는 이것이 apple.stackexchange.com/questions/7984/…에 매우 가깝다고 생각합니다 .
boehj

@boehj는 "로드하지 않는다"고 언급 .bashrc했지만 그게 전부입니다.
Jari Keinänen

알았어, 내가 여기서 혼동하면 미안해
boehj

아마 csh더 나은 (또는 다른 변형)을 좋아할 것입니다 . 하지만 당신은이 것을 알아야한다 >>bash$: 변경 될 수 있습니다
vol7ron

onload 명령을 실행하려면 .profile홈 디렉토리에서 작성 하십시오.
Kolob Canyon

답변:


94

.profile홈 디렉토리 의 파일에 저장하면 다음에 새 쉘을 시작할 때 또는 실행 한 후에 작동합니다.source ~/.profile

이 링크는 쉘에서 시작 파일을 읽고로드하는 순서를 명확하게 표시합니다. http://hayne.net/MacDev/Notes/unixFAQ.html#shellStartup


해결책이 있기 때문에 이것을 수락했습니다 (그리고 거의 동일한 두 개의 게시물 중 첫 번째였습니다).
romeovs

37
하향 투표. 이 조언을 따르지 않는 것이 좋습니다. 문제는 터미널이 로그인 셸을 만들고 Bash 로그인 셸 은 로그인 시작 스크립트 실행하고 ~/.bashrc. 그러나이 .bashrc두 파일은 서로 다른 유형의 설정을 수행하기 때문에 솔루션이 단순히 로그인 시작 파일에 내용을 넣는 것은 아닙니다 . 대신, Bash의 정식 설정은 ~/.bash_profile소스를 ~/.bashrc스크립트의 적절한 시점 (보통 마지막) 에 두는 것 입니다.
Chris 페이지

나는 단지 sh 파일에 넣은 다른 동일한 게시물을 보지 못합니다
Mark

218

거기에 있었어요. 내가 알았던 것은 OS X은 .bashrcbash start에서 파일을 읽지 않습니다 . 대신 다음 파일을 다음 순서대로 읽습니다.

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

Chris Johnsen 의 유익하고 유용한 의견을 참조하십시오 .

기본적으로 터미널 은을 통해 쉘을 시작하여 쉘을 /usr/bin/login로그인 쉘로 만듭니다. 모든 플랫폼에서 (뿐만 아니라 맥 OS X) 의 bash는 사용하지 않는 .bashrc로그인 쉘 (대해서만 /etc/profile과의 첫 번째 .bash_profile, .bash_login, .profile즉 존재하고 읽을 수 있습니다). 이것이 " source ~/.bashrc귀하의 입력 .bash_profile"이 표준 조언 인 이유입니다.

나는 일반적으로 그냥 일반적으로 넣어 줄 것을 넣어 ~/.bashrc에를 ~/.profile- 지금까지 마법처럼 일했다.


38
기본적으로 터미널 은을 통해 쉘을 시작하여 쉘을 /usr/bin/login로그인 쉘로 만듭니다. 모든 플랫폼에서 (뿐만 아니라 맥 OS X) 의 bash는 사용하지 않는 .bashrc로그인 쉘 (대해서만 /etc/profile과의 첫 번째 .bash_profile, .bash_login, .profile즉 존재하고 읽을 수 있습니다). 이것이 " source ~/.bashrc귀하의 입력 .bash_profile"이 표준 조언 인 이유 입니다.
Chris Johnsen

5
다시 "보통 ~ / .bashrc에 ~ / .profile에 넣은 내용을 넣습니다.": 호환성을 극대화하려면 Chris Johnsen의 조언을 따르고 로그인하지 않은 쉘에 적용 할 항목을 배치하는 것이 좋습니다. ~ / .bashrc 및 ~ / .bash_profile에 "source ~ / .bashrc"를 추가하여 로그인 쉘에 대해 실행하십시오. 그렇지 않으면 하위 쉘에 대해 작동하지 않거나 터미널이 비 로그인 쉘을 작성하도록 변경되거나 기본적으로 비 로그인 쉘을 작성하는 xterm 또는 다른 터미널 프로그램을 사용하는 경우 또는 다른 OS에서 동일한 설정.
Chris 페이지

4
관련 노트에서, Mac OS X에서는 ~ / .bashrc가 / etc / bashrc를 실행하여 전역 동작을 선택하는 것을 고려해야합니다. 특히, 각 프롬프트에서 작업 디렉토리를 업데이트하는 / etc / bashrc 코드가 있습니다. 이는 터미널이 프록시 아이콘을 표시하고 동일한 디렉토리에 새 터미널을 작성하고 이력서 및 창 그룹의 작업 디렉토리를 복원 할 수있게하는 것입니다.
Chris 페이지

나를 위해 .bash_profile에서 .bashrc를 소싱하지 못했습니다. 그러나 .profile에서 .bashrc / .bash_profile을 소싱했습니다.
Ken Russell

2
좋은 답변이지만 약간의 오해가 있습니다. 난 단지 bash는 터미널 부하를 믿고 하나~/.bash_profile, ~/.profile, ~/.bash_login, 결코 모든 그들. 3 개의 파일을 작성하여 간단한 테스트를 실행할 수 있습니다. bash는 터미널의 기본 설정 것 같습니다 ~/.bash_profile> ~/.bash_login>을 ~/.profile. 그들 중 누구라도 존재한다면, 선호도가 낮은 것을 건너 뜁니다. 즉,도 소스에 추천 이유를 때로는이다 ~/.profile에서 ~/.bash_profile.
neurite

25

나는에 모든 것을 넣어 ~/.bashrc단지 source ~/.bashrc의 .profile에.

이것은 .bashrc로그인 세션 (예 : 터미널 또는 iTerm) 만 실행되는 반면 screen 및 xterm (및 tmux) 세션은 비 로그인 세션 만 실행 되는 환경을 상속 합니다 .profile.


1
이것이 나의 접근법이다. 이렇게하면 두 시스템에서 모두 작동하는 .bashrc를 유지할 수 있습니다 ... 맥 전용 항목이나 별명과 같은 별명을 내 .bash_profile 파일에 작업용으로 만 사용할 수 있습니다 (맥을 가장 많이 사용하는 곳).
Michael Durrant

2
그 주 .profile여러 쉘에 공통입니다 만 POSIX 호환 쉬 코드를 포함해야합니다. 그것이 소스라면 .bashrc아마도 Bash 특정 코드를 포함 할 것입니다 ( .bashrc파일 의 존재 는 Bash 특정입니다). 나는 당신의 이름을 변경하는 것이 좋습니다 .profile에를 .bash_profile당신이 Bash 전용 방식을 사용하고 있기 때문이다. 또는에서 일반적인 코드를 삽입 .profile하고 생성 .bash_profile하는 소스를 .profile하고 .bashrc.
Chris 페이지

19

두 가지 시나리오가 있습니다.

  1. 당신은 리눅스를 사용하고 있습니다
  2. Mac Os X를 사용하고 있습니다

둘 다 ~/.bashrc터미널의 쉘이 시작될 때로드되거나 소싱되는 프로파일 을 소싱하려고 합니다.


리눅스

Linux에서는 ~/.profile시작할 때 쉘에서 자동으로 소스가됩니다. 따라서 터미널로 이동하여을 입력 cd ~; ls -A하면 모든 파일과 디렉토리가 홈 디렉토리 ( /home/usrname/)에 표시됩니다. 라는 파일이 표시되어야합니다 .profile. 터미널을 시작할 때 자동으로 "소스 화 된"파일입니다.

~/.bashrc(내가하는 일) 에 별칭과 함수를 ~/.profile추가하려면 ~/.bashrc비어 있지 않은 파일 인지 확인하는 if 문을 추가하고 소스를 추가해야합니다.

~/.profile이미 입력 했는지 확인하려면을 입력하십시오 nano ~/.profile. 텍스트 편집기에서 파일을 엽니 다 (사용중인 경우 gedit을 사용하거나 사용 방법을 알고있는 경우 vim을 사용할 수 있음). 빈 텍스트 파일을 얻을 수 있지만 (그렇지 않아야 함) 계속 진행하면됩니다. 당신이 라인이 표시되지 않으면 어디 말한다 source ~/.bashrc, 다음 어딘가에 다음 줄을 입력 (if 문의 중간에 끝이나 시작이 아니라 같은 적절한 장소에 보관)

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

이것은 ~/.bashrc비어 있지 않은 파일인지 ( if 가있는 경우 [ -s ~/.bashrc ]) 확인하고 그러한 파일이면 소싱합니다. 꽤 간단합니다. 이제 유효한 별칭, 함수, 변수 등을에 추가 할 수 있습니다 ~/.bashrc.


맥 OS X

기본적으로 Max OS X 소스는 ~/.bash_profile입니다. 사물을 추가 할 수 있으려면 ~/.bashrc(즉, OS X에서도 수행하는 작업) Linux와 동일한 절차를 따릅니다. 터미널에을 입력하십시오 cd ~; nano .bash_profile. 행을 확인하고 source ~/.bashrc없는 경우 위의 if 문을 추가하십시오 ( if [ -s ~/.bashrc ]; then source ~/.bashrc; fi).


노트

if 문을 작성할 때 (예를 들어, 기본적으로 모든 사이의 공간을 두십시오 if [ -s ~/.bashrc]; then echo "found"; fibeween에 공백이 없기 때문에 작동하지 않습니다 ~/.bashrc]-이 생각됩니다 인터프리터가 한 단어입니다).

if 문에서 물건을 더 잘 확인하는 방법을 찾으려면 터미널로 이동하여 man \[; 이것은 본질적으로 if 문의 요약을 제공합니다. 예를 들어, 파일이 if [ -f /path/to/file ]; then echo "it's a file"; else echo "not a file"; fi있는지 , /path/to/file그에 따라 표준 출력으로 인쇄되는지 확인합니다. 나는 눈에 쉽게 보이고 빠른 참조를 위해 항상 이것을 참조합니다 : 7.2. 파일 테스트 연산자 .

이게 도움이 되길 바란다. 나는이 모든 것들을 시작했을 때 얼마나 혼란 스러웠는지 기억한다. 따라서 미래의 UNIX 노력에 행운을 빕니다!


리눅스에서 .profile쉘이 로그인 쉘인 경우에만 소스 .bashrc가 제공 되고 그렇지 않으면 소스가 제공됩니다.
smac89

11

.bash_profile의 .profile 소싱이 나를 위해했습니다.

echo 'source ~/.profile' >> ~/.bash_profile

1
.bash_profile에서 .profile을 소싱하는 것은 좋은 일이지만, 이것만으로도 .bashrc가 로그인 쉘에 의해 실행되지는 않습니다. .profile은 이미 .bashrc를 제공해야합니다. bash 이외의 쉘을 사용하면 문제가 발생할 수 있습니다. 대부분의 Mac 사용자는 사용하지 않을 것입니다. 그러나 어떤 이유로 든이를 기억하십시오. :)
Terry N

@TerryN이 말한 것을 확장하려면 :가 아닌 from에서 출처 .bashrc를 확인하십시오 . Bash 전용이며 다른 두 가지를 제공해야합니다. .bash_profile.profile.bash_profile
Chris 페이지

6

rvm (자동 설치 프로그램, 수동 편집 없음)을 설치 한 후 ~/.bash_login이전에 파일이 없었던 자체 파일을 만들었습니다 .

그러나 이것은 내 ~/.profile설정 및 별칭이 더 이상로드되지 않았 음을 의미합니다 ! 많은 지름길이 사라졌습니다. 나는 그들이 독점적으로가 아니라 순차적으로 달린다고 생각했다 :-/

나는 덧붙였다

. ~/.profile 

~/.bash_login체인 것들 내가 예상대로.


+1, 이것이 내가 가진 상황입니다. .bash_login 또는 .bash_profile 중 하나가 .profile이 실행되는 것을 방지한다는 것을 알았습니다. bash가 왜 그렇게 많은 충돌하는 시작 파일이 필요하다고 생각하는지 모르겠습니다.
RichVel

.profile여러 다른 쉘에 공통이며 POSIX 호환 sh 코드 만 포함해야합니다. .bash_profileBash 특정이며 Bash 특정 코드를 포함 할 수 있습니다. 일반적으로 Bash를 사용하는 .bash_profile경우 시작 코드에 Bash에 의존하는 것이 포함되지 않도록주의하지 않는 한 선호해야합니다 . 프로그램 .bash_login은 Bash 특정 코드를 포함하기 때문에 그렇게했을 것입니다. 그러나 .profile존재하는 경우 소스 코드를 포함해야 합니다.
Chris 페이지

3

퍼팅 ...

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

... in ~/.bashrc다음 소스 ~/.bashrc~/.bash_profile 설치된 터미널 프로그램에서 작동하지 않았습니다.

그런 다음 메뉴 드롭 다운 편집> 프로파일 환경 설정 , 제목 및 명령으로 이동하여 해당 페이지의 명령 섹션에서 로그인 쉘로 명령 실행을 선택했습니다 .

이렇게 한 후 새 터미널을 시작하면 입력 할 때 원하는 결과가 표시됩니다

 type rvm|head -1

즉 "rvm은 함수입니다". 내가이 변경을 할 때까지 그렇게하지 않았으며, 여기에서 다른 답변에 설명 된 변경 사항 .bash_profile과 이후에 변경 한 것이 유일한 .bashrc것입니다.


2

우선 ~/.bashrc두 번째 쉘이 호출 될 때마다 (예를 들어 쉘 스크립트를 실행할 때) 실행되고 ~/.profile모든 로그인에서 호출 되는 파일 임을 알려 드리겠습니다 .

따라서 파일에 . ~/.bashrc명령 을 작성하는 것이 좋습니다. ~/.profile이 명령은 로그인 할 때마다 bashrc 파일을 실행합니다.


.profile이 로그인시 실행되면 .bashrc 파일이 자동으로 실행됩니다.
arun rana

그래서 .bashrc는 모든 로그인마다 간접적으로 실행됩니다
arun rana

1
bashrc는 비 로그인 쉘을위한 것입니다. bash_profile / bash_login / profile / 로그인 쉘에 대한 다른 것. 이것은 로그인 쉘 (예를 들어, 스크린 / tmux 세션, 데스크탑 환경 내의 터미널 등)을 포함하는 엄청난 양의 경합의 원천입니다. 반드시 "두 번째 쉘"은 아닙니다. 쉘 입력 문제입니다.
Jason Salaz 2016 년

3
Bash가 아닌 쉘을 사용하는 경우 설명하는 작업을 수행하면 문제가 발생할 수 있습니다. .profile은 모든 쉘에 적용되며 .bashrc에는 다른 쉘이 이해하지 못하는 언어가 포함될 수 있습니다. .profile 대신 .bash_profile에 작성한 것을 넣으십시오. (또한 .bash_profile이 "source .profile"이되도록하십시오.)
Terry N

1

원격 서버 (Digital Ocean) Ubuntu 16.04에 rbenv를 설치 한 후에도 같은 문제가 발생했습니다.

어떻게 든 만들어졌습니다 ~/.bash_profile. ~/.bashrcOS X 시스템 에서 동일 합니다.

그리고 우분투는 읽기 전용으로 시작 ~/.bash_profile했지만 꼭 그렇지 ~/.bashrc는 않았습니다 .

그래서 방금 ~/.bash_profile다음과 같이 데이터를 백업했습니다 .

mv ~/.bash_profile ~/.bash_profile.bak

이전 이름 ~/.bashrc~/.bash_profile

mv ~/.bashrc ~/.bash_profile

그것은 나를 위해 일했다. 내 ssh 로그인 후 모든 것이로드되었습니다 ~/.bashrc.


0

이것이 다른 사람을 도울 수있는 경우 ...

.bashrc올바른 사용자에게 적합한 파일을 편집하고 있는지 확인하십시오 . Vagrant를 사용하여 비슷한 문제가 발생했습니다. 실행 후 vagrant ssh.bashrc파일이 실행되지 않았습니다. 해결책은 vagrant가 vagrant라는 사용자로 로그인한다고 생각했기 때문에 간단했으며 실제로 다른 사용자로 로그인했습니다. 그래서 잘못된 .bashrc파일 을 편집하고있었습니다 . 올바른 .bashrc파일을 편집 한 후 내 별칭이 인식되었습니다.


-1

그런데 ZSH를 활성화하면 bash가 바뀝니다!

따라서 모든 ~/.bashrc파일이로드되지 않습니다.

~/.zshrc대신 별칭을 설정해야합니다 .


-2

OSX에 스타일의 로그인으로 유지하기 위해 .profile정상 bash는 동작을 지원 .bashrc당신은 사용할 수 있습니다 .bashrc당신은 당신에 대한 심볼릭 링크를 제공하여 일반 괜찬와 OSX 사이를 전환 할 경우 파일을 .bashrc호출 된 파일을 .bash_profile. 이 파일을 시도하기 전에이 파일이 존재하지 않는지 확인하십시오.

ln -s .bashrc .bash_profile

2 개의 서로 다른 쉘 초기화 스크립트 사이에서이 연결을 수행하면 필요한 기능 분리가 해제됩니다. 언젠가는 세션 레벨 ( .bash_profile)에서 초기화하고 각 쉘 레벨 ( .bashrc) 에서 다른 초기화가 필요합니다 .
dan

-2

/ etc / bashrc는 mac 시스템의 전역 프로필입니다. 이 파일의 맨 위에 alias ls = "ls -G"를 추가 할 수 있습니다. 모든 파일에는 시스템에 색상이 지정된 파일과 폴더가 있으므로 각 개별 사용자를 위해 추가 항목을 설정하지 않아도됩니다. 또한 "sudo su-"와 함께 자신을 근절하기 위해 추가 두통없이 색상이 지정된 파일 및 폴더가 있음을 알 수 있습니다.

또 다른 재미있는 팁 : mac의 Iterm2를 사용할 때 색상 프로파일을 가져 오면이 "/ etc / bashrc"옵션을 설정 한 후 색상 구성표에 따라 파일 및 폴더의 색상이 즉시 렌더링됩니다.

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