.bashrc의 목적은 무엇이며 어떻게 작동합니까?


답변:


131

.bashrcBash가 대화식으로 시작될 때마다 실행 되는 쉘 스크립트 입니다. 대화식 쉘 세션을 초기화합니다. 명령 프롬프트에서 입력 할 수있는 명령을 해당 파일에 넣을 수 있습니다.

특정 환경에서 사용하기 위해 쉘을 설정하거나 원하는대로 항목을 사용자 정의하는 명령을 여기에 넣습니다. 일반적으로 사용하는 것은 항상 사용할 수 .bashrc있는 별칭 입니다.

.bashrc에서 실행되는 모든 대화 형 쉘 출시. 당신이 말하는 경우:

$ bash ; bash ; bash

Ctrl-D세 번 때리고 세 번 .bashrc뛸 겁니다 그러나 이것을 대신하면 :

$ bash -c exit ; bash -c exit ; bash -c exit

그때 .bashrc이후로 전혀 실행되지 않습니다 -c배쉬 호출이 아닌 상호 작용합니다. 파일에서 쉘 스크립트를 실행할 때도 마찬가지입니다.

대비 .bash_profile.profile새 로그인 셸 시작시에만 실행됩니다. ( bash -l) 명령 을 한 번 실행할지 또는 모든 대화식 쉘 시작마다 실행할지에 따라 명령을 .bashrc넣을지 .bash_profile여부를 선택합니다.

내가 선호하는 별칭에 대한 반례로서 , 이러한 변경은 일반적으로 dem 등성이 아니기 때문에 대신 조정 .bashrc을 원합니다 .PATH.bash_profile

export PATH="$PATH:/some/addition"

당신이 있음을 넣으면 .bashrc대신 때마다 대화 형 서브 쉘을 출시 :/some/addition의 말에 압정으로 고정 얻을 것이다 PATH당신이 명령을 잘못 입력하면 쉘에 대한 추가 작업을 생성, 다시.

당신이 때마다 새로운 대화 형 bash 쉘을 얻을 에서 쉘vi 과 함께 :sh예를 들어,.


6
사소한 퀴즈 : 대부분의 다른 셸과 달리 bash는 로그인 셸로 시작될 때 인스턴스 별 구성 파일을 자동으로로드 하지 않습니다.bashrc . 때때로 예기치 않은 동작발생할 수 있습니다 . 일반적인 해결 방법은 소스입니다 .bashrc에서 .profile.bash_profile대신.
Ilmari Karonen

@IlmariKaronen .bashrc다른 쉘에서 사용하기위한 것이 아니므로 다른 쉘에서 사용하지 않는 것이 좋습니다 (다른 쉘이 아닌 다른 쉘에서 .profile사용 가능 bash).
chepner

@IlmariKaronen 무슨 일 (읽기 : 어떻게 디버깅 할 수 있습니다 이유를) 할 때 source ~/.bashrc또는 . ~/.bashrc또는 [[ -f ~/.bashrc ]] && source. ~/.bashrc또는 [ -f ~/.bashrc ] && source ~/.bashrc작동하지 않습니다?
Nikos Alexandris

@NikosAlexandris : 그것은 별도의 질문입니다. 제발 별도로 요청 .
워렌 영

@WarrenYoung 나는하지만 .bashrc실제로 그것이 출처 임을 깨달았습니다 ( superuser.com/a/183980/128768 의 권장 명령 사용 ). 내가 직면 문제는 실제의하지 소싱 https://github.com/junegunn/fzf내부에이 명령을 통해 .bashrc: source ~/.fzf.bash. 새 터미널을 시작하면 Ctrl+ R가 표시 `__fzf_history__`bash: fzf: command not found됩니다. 수동으로 소싱 .bashrc하고 동일한 바로 가기 키가 예상대로 fzf를 시작합니다. 소음에 대한 사과드립니다.
Nikos Alexandris

20

.bashrc파일 의 목적은 변수, 함수 및 별명을 설정하고 (PS1) 프롬프트를 정의하며 새 터미널 창을 열 때마다 사용할 기타 설정을 정의 할 수있는 장소를 제공하는 것입니다.

새 터미널, 창 또는 창을 열 때마다 실행되어 작동합니다.

여기에서 내 구문을 볼 수 있습니다 (구문 강조 표시 사용) .

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

설명:

-1. 내 기록 파일을 설정하여 중복을 무시하고 기본값보다 훨씬 큽니다.
-2. lsLinux 또는 OSX
-3을 사용 중인지 에 따라 색상 옵션 . md하나의 명령
-4 를 사용하여 디렉토리로 만들고 cd하는 기능 " " . 자식 저장소에있는 경우 현재 자식 분기를 찾고
-5. -9. <code> 20:00:43 durrantm Castle2012 / hom / durrantm / Dropnot / _ / rails_apps / linker master \ n $ _ </ code>
-10 과 같이 멋진 PS1 프롬프트를 정의하십시오 . PS2 프롬프트 개선
-11. 명령 행
-12 에서 vi를 편집기로 설정하십시오 . vi를 기본 편집기
-13 으로 설정하십시오 . 내 .bash_aliases파일이 있으면
-14를 실행 하십시오 . 내 자식 탭 완성 스크립트 (원격 및 분기 용)가 있으면 실행하십시오.
-15. 존재하는 경우 자동 점프를 실행하십시오
-16. bash version> = 4 인 경우 cd 부분을 입력하지 않고 cd'ing 허용
-17. bash 완료 스크립트가 있으면
-18을 실행하십시오. TMUX가 있으면
-19를 사용하십시오 . 내 PATH
-20에 rvm을 추가하십시오 . 존재하는 경우 rvm을 사용하십시오.

필자는이 이식성을 사용자 정의없이 모든 Linux 또는 OSX 시스템에서 작동하도록 만들었습니다. 따라서 특정 기능과 다른 스크립트를 사용하기 전에 존재 여부에 대한 여러 테스트가 수행됩니다.

또한 새 터미널 창을 여는 데 영향을주는 문제없이 새 컴퓨터에서 즉시 전체 파일을보다 쉽게 ​​사용할 수 있습니다.


Overkill ... ͏͏͏͏͏͏͏͏͏
Pacerier

응? 너무 도움이 되셨습니까?
Michael Durrant

2
공유해 주셔서 감사합니다. 여기에 풍부한 정보가 있습니다.
Vic

7

그것은이다 bashconfig 파일.

대화 형 (비 로그인) 쉘인 경우 다음 파일에서 구성을 읽습니다.

  • $HOME/.bashrc

로그인 쉘의 경우 다음 파일에서 구성을 읽습니다.

  • /etc/profile (항상 출처)
  • $HOME/.bash_profile (이 파일들 중 나머지 파일들은 하나가 발견 될 때까지 순서대로 확인되고, 다른 파일들은 읽지 않습니다)
  • $HOME/.bash_login
  • $HOME/.profile

로드 방법 / 시간에 대한 간단한 그림은 아래 이미지에 있습니다.

내가 추가 echo.bashrc.bash_profile

대화식 쉘 대 로그인 쉘

자세한 내용 man bash은 참조하십시오


2
이전 질문에 실제로 가치를 더하지는 않습니다. 또한 Unix & Linux를 처음 사용하는 경우 텍스트 그림을 게시하지 말고 코드 블록 형식을 사용하고 콘솔에서 복사하는 것이 좋습니다. 이를 통해 텍스트를 검색 / 복사 할 수 있습니다. 귀하의 예의 경우 실제로는 복잡한 명령이나 검색하기에 좋은 것이 아니라 다른 답변에 대한 모범 사례가 있습니다.
Centimane

1
나는 '오래된 질문'에 대한 귀하의 언급을 완전히 이해하지 못합니다. 최상위 질문 목록에 있으며 60k 뷰와 관련이 있습니다. 이전 답변과 같은 대화 상자 / 추측과 달리 추가 값이 형식에서 나온 것으로 생각했습니다. 그러나 형식도 편집되었습니다. 코드 블록 사용에 대한 귀하의 의견을 기억할 것입니다. 감사합니다.
Timothy LJ Stewart

2
답변을 게시했기 때문에 '활성'질문 목록의 맨 위에 있습니다. 이 질문은 원래 2014 년에 요청되었으며 답변을 수락했습니다. 허용 된 대답의 목적을 서술 .bashrc사이의 차이를 구별 .bashrc.bash_profile답변의 내용을 다루고있다. 낙심하지 말고 정직한 노력을 기울이지 만 다른 답변으로는 다루지 않는 내용으로 질문에 대답하는 데 집중하십시오.
Centimane
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.