로그 아웃했다가 다시 로그인하지 않고 .bashrc를 어떻게 다시로드합니까?


답변:


2634

다음 명령을 입력하면됩니다.

source ~/.bashrc

또는 더 짧은 버전의 명령을 사용할 수 있습니다.

. ~/.bashrc

88
이것은 로그인 및 로그 아웃과 정확히 동일하지 않습니다. .bashrc에 다음 줄이 export PATH=$PATH:foo있다고 가정 해 봅시다 export PATH=$PATH:bar. 당신이 로그인하고 밖으로 백업하는 경우에만 barPATH에있을 것입니다,하지만 당신은 무엇을 제안 당신이 경우에, 모두 foobarPATH에있을 것입니다. 이 문제를 해결하는 방법을 알고 있습니까?
HighCommander4

7
@ HighCommander4-원하는 것을 수행하는 매우 불만족스러운 방법은 "bash -l"을 수행하는 것이지만 실제로 이것은 새로운 서브 쉘을 생성하고 로그 아웃하면 "foo"가 여전히 PATH에있는 둘러싸는 쉘로 돌아갑니다. PATH에 관심이 있다면 "PATH 설정 해제"를 수행하고 처음부터 재구성 할 수 있지만 .bashrc를 소싱하기 전에 "PATH = / bin : / usr / bin"을 수행하는 것이 더 쉬울 것입니다. 로그인시 PATH 변수가 작성되는 방법은 실제로는 로그인 ( "man login"참조) 및 / etc / profile ( "man bash"참조)의 입력을 포함하여 상당히 복잡합니다.
George Hawkins

2
@Alex ~ / .bashrc 줄을 ~ / .bash_profile에 추가하여 자동화 할 수는 있지만 이것이 좋은 방법인지는 모르겠습니다.
Vivek Gani

4
또한 .bashrc를 열고 편집기가 종료 된 후 다시로드하는 별칭 (~ / .bashrc 또는 ~ / .bash_aliases에 저장할 수 있음)을 만드는 것이 좋습니다. 예를 들어 다음과 같이 별명으로 두 명령을 결합하여이를 수행 할 수 있습니다 (vim이 선호하는 편집기 인 경우 다른 것으로 바꾸십시오) alias editbashrc='vim ~/.bashrc; source ~/.bashrc'. 사용자 지정 별칭을 사용하는 경우 편집을 수행 한 후 다시로드에 대해 생각할 필요가 없으므로 편집이 훨씬 매끄 럽습니다.
Samuel Lampa

6
현재 터미널 에만 영향을 미칩니다 .
matepal297

283

또는 다음을 사용할 수 있습니다.

exec bash

이것은 똑같은 일을하고 기억하기 쉽습니다 (적어도 나를 위해).

exec명령은 완전히 지정된 명령 줄을 실행하여 쉘 프로세스를 대체합니다. 이 예에서는 현재 셸이 무엇이든 bash(업데이트 된 구성 파일을 사용하여) 새로운 인스턴스로 바꿉니다 .


13
source .bashrc명령 의 차이점을 설명해 주 exec bash시겠습니까?
muradin

18
@muradin 은 현재 쉘에서source 인수로 전달 된 파일의 내용을 실행하는 내장 쉘 명령입니다 . 따라서 귀하의 예에서는 현재 셸에서 .bashrc 파일을 실행합니다. 그리고 명령은 쉘을 주어진 프로그램으로 대체합니다. 예를 들어, 쉘은 bash로 (업데이트 된 구성 파일로)exec
WhoSayIn

3
내 초 특정 상황에서 이것은 완전히 흔들렸다. 내 Dockerfile은 .bashrc를 수정하는 설치 스크립트를 실행합니다. 그런 다음 다시로드해야하지만 대신에 . ~/.bashrc실행 되므로 누락 되어 오류 가 있습니다. 쉘에서 찾을 수 없으므로 솔루션도 나옵니다. 나는 이것을 시도했고 도커 이미지는 부드럽게 만들어졌습니다! dashbashshoptsource
m59

9
우아하지만 "같은 일을한다"는 것은 전적으로 정확하지 않습니다. source ~/.bashrc전체 쉘 환경 을 보존 하지만 (의 소싱으로 수정되었을지라도 ~/.bashrc) exec bash현재 쉘의 환경 변수 만 보존합니다 (쉘 변수, 기능, 옵션의 측면에서 현재 쉘에 대한 임시 변경 사항 만 손실 됨). 필요에 따라 하나 또는 다른 방법이 선호 될 수 있습니다.
mklement0

12
@SEoF, "bash inception"이라고 말하고 생각하는 것을 생각하고 있다면 잘못이라고 말해야합니다. 영화와 달리 반복적으로 할 때 bash에서 bash로 계속 들어 가지 않습니다 exec bash. 이 exec명령 쉘을 프로그램으로 대체합니다 ( 이 경우에는 bash). 따라서 터미널에는 항상 하나의 bash 인스턴스가 존재합니다.
John Red

121

하려면 보완하고 대비 두 개의 가장 인기있는 답변을, . ~/.bashrc그리고 exec bash:

두 솔루션 모두 효과적으로 다시로드 ~/.bashrc되지만 차이점이 있습니다.

  • . ~/.bashrc또는 현재 쉘source ~/.bashrc보존 합니다 .

    • ~/.bashrc현재 쉘로 다시로드하는 수정 ( 소싱 )을 제외하고 환경 변수, 쉘 변수, 쉘 옵션, 쉘 기능 및 명령 히스토리를 포함 하여 현재 쉘 및 해당 상태보존 됩니다.
  • exec bash또는보다 견고하게 exec "$BASH"[1]현재 쉘 을 새 인스턴스로 교체 하므로 현재 쉘의 환경 변수 (임시 정의한 변수 포함) 보존합니다 .

    • 즉, 쉘 변수, 쉘 기능, 쉘 옵션, 명령 히스토리 측면에서 현재 쉘에 대한 임시 변경 사항이 유실됩니다.

필요에 따라 하나 또는 다른 방법이 선호 될 수 있습니다.


[1] exec bash은 이론적으로 현재 셸을 시작한 것과 다른 bash 실행 파일을 실행할 수 $PATH있습니다. 특수 변수 $BASH에는 항상 현재 셸을 시작한 실행 파일의 전체 경로가 포함 exec "$BASH"되므로 동일한 실행 파일 을 사용해야합니다 .
메모 재 "..."주위 $BASH: 그대로 변수 값 배시에 의해 해석하지 않고, 사용되는 것을 보장을 이중 인용; 값에 공백이나 다른 셸 메타 문자가없는 경우 (이 경우에는 해당되지 않음) 큰 따옴표가 필요하지 않지만이를 사용하는 것이 좋습니다.


내가 물어보기 전에 내 질문에 대답 했어 이것은 아는 것이 좋습니다. 나는 종종 CLASSPATH를 단일 세션으로 설정했다.
swinefish

따라서 exec "$ BASH"를 호출하더라도 .bashrc가 설정 한 변수가 다음에 열리는 쉘에서 발견됩니다 (현재 세션과 동일한 실행 파일 사용)?
nitinr708

2
@ nitinr708 : 예, exec $BASHsource ~/.bashrc이므로 새 세션에서 셸 환경에 대한 변경 사항을 볼 수 있습니다.
mklement0

@ Gaming32, 하이퍼 링크 된 각주 아이디어에 감사하지만 실제로 작동하지는 않았습니다 (그리고이 짧은 대답에서는 그렇게 중요하지 않습니다).
mklement0

44

누군가 내 대답을 편집하여 잘못된 영어를 추가했지만 여기에 허용 된 답변보다 열등한 원본이 있습니다.

. .bashrc

25
현재 디렉토리가 실제로 홈 디렉토리 인 경우에만 작동합니다. 다음이 작동합니다.. ~ / .bashrc
Brian Showalter

6
이것이 어떻게 작동합니까? "..bashrc"를 할 때 실제로 어떤 일이 발생합니까? 감사!
Jed Daniels

54
. "source"내장 명령에 대한 BASH 단축키입니다. 따라서 "..bashrc"는 BASH 인터프리터의 "source .bashrc"와 동일합니다.
Brian Showalter

7
멋있는. 감사. 이제는 몰랐습니다.
Jed Daniels

2
난 그냥 추가 할 수있는 편집 요청을 제출 ~/하지만, 상단의 대답 쇼 이후 모두 source ~/.bashrc. ~/.bashrc이 대답 그냥 중복으로 삭제해야하는지 궁금합니다.
맥스

18

환경에 따라 입력 만

bash

작동 할 수도 있습니다.


15
그러나 이것은 현재 쉘 내에서 새로운 쉘을 호출하여 자원을 낭비합니다. 현재 쉘을 새로 호출 한 쉘로 대체 하는 @WhoSayln의 exec 솔루션을 사용하는 것이 좋습니다 .
Bernhard Wagner

네 그냥 소스를 사용하십시오. 이것은 전적으로 불필요하고 성가시다.
dylnmc

당신의 산란 경우 새 쉘 BernhardWagner의 코멘트 @ 외에도 현재 bash는 역사를 풀어
peterchaula

이것은 사용자 권한 액세스가 제한되는 좋은 솔루션입니다.
Tunde Pizzle

서브 프로세스를 호출하면 추가 값이없는 복잡성 계층이 추가됩니다.
Alan Berezin의

18

이를 통해 "source ~ / .bashrc"를 입력 하지 않아도 됩니다 .

bashrc 파일을 포함 시키십시오 :

alias rc="vim ~/.bashrc && source ~/.bashrc"

bashrc를 편집 할 때마다 별명 " rc "를 실행하십시오.



5

환경에 따라 SSH 세션을 열 때 .bashrc가 자동으로로드되도록 스크립팅을 추가 할 수 있습니다. 최근 Ubuntu를 실행하는 서버로 마이그레이션했으며 .bashrc 또는 .bash_profile이 아닌 .profile이 기본적으로로드됩니다. .bashrc에서 스크립트를 실행하려면 source ~/.bashrc세션을 열 때마다 실행해야 했으므로 원격 배포를 실행할 때 도움이되지 않습니다.

세션을 열 때 .bashrc가 자동으로로드되도록하려면 이것을 .profile에 추가하십시오.

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

세션을 다시 열면 .bashrc에있는 경로 / 스크립트가로드되어야합니다.


".profile"에이 기능이 있지만 작동하지 않습니다. 종료 할 때마다 수동으로해야합니다. 어떤 제안?
Wayne Smallman

4

vultr cloud 기반 서버를 설정하기 위해 easyengine을 사용했습니다.
에서 bash 파일을 찾았습니다 /etc/bash.bashrc.

그래서 source /etc/bash.bashrc나를 위해 속임수를 썼는지!

최신 정보

베어 서버 (우분투 16.04)를 설정할 때 아직 사용자 이름을 설정하지 않았고 루트를 통해 로그인 할 때 위의 정보를 사용할 수 있습니다.

sudo 권한을 가진 사용자를 작성하고 대신이 사용자 이름으로 로그인하는 것이 가장 좋습니다.
.profile 및 .bashrc 파일을 포함하여 설정을위한 디렉토리가 생성됩니다.
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

이제 ~/.bashrc파일 을 편집 (및 "소스") 합니다.

내 서버에서 이것은 /home/your_username/.bashrc
( your_username위에서 만든 새로운 사용자 이름이며 이제 로그인하십시오)에 있습니다.


4

exec bash는 현재 쉘을 교체하기 위해 새로운 쉘을 다시 실행하고 시작하는 좋은 방법입니다. 대답에 추가하기 위해 $ SHELL은 bash 인 현재 쉘을 반환합니다. 다음을 사용하면 bash뿐만 아니라 현재 쉘을 다시로드합니다.

exec $SHELL -l;


3

PATH를 변경할 때 작동하는 것은 다음과 같습니다. exec "$BASH" --login


문제는 (직접적으로) 다시로드 하지 않는 reloading ~/.bashrc에 관한 --login것입니다 . 사용자 수준에서는 대신 다시로드 (또는 또는 )됩니다. ~/.bash_profile~/.bash_login~/.profile
mklement0

3

유형:

source ~/.bashrc

또는 더 짧은 형태로 :

. ~/.bashrc


1
다시, 홈 디렉토리에 있거나 더 정확하게는 디렉토리가있는 경우에만 작동합니다 .bashrc. 수락 된 답변에서 알 수 있듯이이를 수행하는보다 올바른 방법은 source ~/.bashrc입니다.
John Red

2

msysgit에서 다음 명령을 사용합니다

. ~/.bashrc

짧은 버전

source ~/.bashrc

@jwg 허용되는 답변은입니다. .bashrc. msysgit의 홈 디렉토리에있는 경우에만 작동합니다.
Sojan V Jose

@jwg ok i thin 나는 'source ~ / .bashrc'를 입력 할 필요가 없으며 더 짧은 버전을 사용한다고 언급했습니다.
Sojan V Jose

@jwg 좋아 나는 원래 답변에 편집으로 추가했습니다 :)
Sojan V Jose

왜 중복 답변이 @Sojan입니까?
nitinr708

@ nitinr708 2014 년. 나는 간신히 기억한다 : P. 원래의 대답은 나중에 내가 추측 한 것에서 편집되었습니다.
Sojan V Jose

2

대화식 쉘을 가정하고 현재 명령 기록을 유지하고 / etc / profile (/ etc / bashrc를 포함한 환경 데이터를로드하고 Mac OS X에서 /etc/paths.d/에 정의 된 경로를로드 함)을로드하려고합니다. path_helper), 명령 기록을 추가하고 login ( '-l') 옵션으로 bash 실행을 수행하십시오.

history -a && exec bash -l

1

이것은 또한 작동합니다 ..

cd ~
source .bashrc

7
그것은하지만 작업 디렉토리를 ~로 변경합니다.
Albin

1
문맥 살아 @Krinkle 유지 주셔서 감사합니다
nitinr708

~작업 디렉토리를 사용자 홈 디렉토리로 변경 하도록 지정해야 합니까?
Kenly

1

순수한 exec bash명령이 환경 변수를 보존 한다는 것을 알았 으므로 exec -c bash빈 환경에서 bash를 실행하는 데 사용해야 합니다.

예를 들어, bash에 로그인하고 export A=1, 당신의 경우 exec bashA == 1.

당신이 경우 exec -cl bash, A비어 있습니다.

이것이 최선의 방법이라고 생각합니다.


-2

나는 개인적으로

alias ..='source ~/.bashrc'

내 bashrc에서 ".."를 사용하여 다시로드 할 수 있습니다.


4
많은 사람들 ..이에 대한 별칭으로 사용 cd ..하므로 혼동 될 수 있습니다.
대부

별칭의 이름을 제외하고 좋은 생각입니다. alias rehash='source ~/.bashrc'나의 선택이다.
Frank Nocke

재로드 쉘로 사용하는 "_rs"와 같은 것을 사용하십시오. 나는 별명을 시작하기 위해 _를 거의 사용한다. 이것은 js libs underscorejs 또는 lodash와 유사합니다.
Jimmy MG Lim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.