bash를 로그인 쉘로 시작하도록 gnome-terminal을 구성하십시오. .bashrc를 읽지 않습니다.


24

RVM을 gnome-terminal과 통합 하려고합니다 .

기본적으로 gnome-terminal은 bash를 로그인 쉘로 시작하지 않습니다. 이 답변run command as a login shell 에서 RVM 설정과 동일한 주제에 대해 제안한대로 활성화 했지만이 작업을 수행 할 때 파일을 읽을 수 없습니다..bashrc

예를 들어, 환경 변수를 .bashrc만든 다음 새 그놈 터미널을 시작할 때 읽을 수 없습니다. source .bashrc파일을 읽으려면 명시 적으로 실행해야 합니다.

이것이 예상되는 동작입니까?

답변:


38

그렇습니다, 그것은 예상되는 행동입니다.

간단히 말해서 행동은 다음과 같습니다.

  • bash는 대화식 로그인 쉘로 시작했습니다. ~/.profile
  • bash는 대화 형 비 로그인 셸로 시작했습니다. ~/.bashrc

자세한 내용 은 시작 파일에 대한 bash 매뉴얼을 읽으십시오 .

개인적으로, 나는이 행동이 이상하다고 생각하며 아직이 디자인 결정에 대한 합리화를 찾지 못했습니다.


용어에 대한 설명 :

  • 대화 형 쉘은 당신이, 당신이 그것을에 명령을 입력 할 수있는 수단을 상호 작용할 수있는 쉘입니다. 사용할 대부분의 쉘은 대화식 쉘입니다.
  • 비 대화 형 쉘은 쉘되어있는 당신은 상호 작용할 수 없습니다. 쉘 스크립트는 비 대화식 쉘 내에서 실행됩니다.
  • 로그인 쉘은 당신이 당신의 시스템에 로그인 할 때 시작되는 쉘입니다.
  • 비 로그인 쉘은 로그인 프로세스 후에 시작되는 쉘입니다.

표시되는 대부분의 셸은 대화 형 비 로그인 셸 입니다. gnome이 "로그인 쉘"이기 때문에 gnome과 같은 그래픽 환경을 실행하는 경우 특히 그렇습니다. gnome 내부에서 시작된 모든 bash 세션은 비 로그인 쉘입니다. 실제 대화 형 로그인 셸을 보려면 가상 콘솔 (을 사용하여 Ctrl+Alt+F1)로 이동 한 다음 사용자 이름과 비밀번호를 사용하여 로그인하십시오. 그것은 실제 대화식 로그인 bash 쉘입니다. 을 사용하여 그래픽 쉘로 돌아갈 수 있습니다 Ctrl+Alt+F7.

--login로그인 한 후에도 bash가 로그인 쉘인 것처럼 동작하도록 하는 옵션 이 있습니다. gnome-terminal을 로그인 쉘로 시작하도록 구성하면 --login옵션을 사용하여 bash를 시작할 수 있습니다.


일반적으로 bash는 항상 ~/.bashrc대화식 쉘에서 읽 습니다. 내가 추천하는 방법은 다음과 같습니다.

~/.bash_profile파일을 작성 하십시오. bash가 로그인 쉘로 시작된 경우을 찾기 ~/.bash_profile전에 먼저 찾습니다 ~/.profile. bash가 발견되면 ~/.bash_profile읽지 않습니다 ~/.profile.

다음 줄을 넣으십시오 ~/.bash_profile.

[ -f "$HOME/.profile" ] && source "$HOME/.profile"
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"

bash가 대화식 로그인 쉘로 시작되면 다음 파일을 읽습니다.

  1. ~/.bash_profile
  2. ~/.profile
  3. ~/.bashrc

bash가 대화 형 비 로그인 셸로 시작된 경우 :

  1. ~/.bashrc

당신은 bash에 특정한 ~/.bashrc것들과 bash에 특정한 것들을 넣어야한다 ~/.profile. 예를 들어 PATH간다 ~/.profile하고 HISTCONTROL간다 ~/.bashrc.

참고 ~/.profilebash는 특정하지 않습니다. 다른 텍스트 기반 쉘 (예 : sh 또는 ksh) 및 그래픽 쉘 (gnome)도 읽습니다 ~/.profile. 그렇기 때문에 bash 전용 항목을 넣지 않아야합니다 ~/.profile.


1
+1. 고마워, 이것은 나를 벽으로 몰고 있었다 ... :-)
richsage

1
mywiki.wooledge.org/DotFiles 는 왜 그런지에 대한 역사를 설명합니다. rvm에서이 문제가 발생하는 주된 이유는 rvm이 대신 코드에 코드를 넣었 기 때문입니다 ~/.bashrc. 결함은 rvm에 있습니다.
geirha

@geirha에 따라 그들은 사용했다~/.profile
sanmai

이론적 근거는 프로파일 스크립트 .bashrc가 수행해야 할 작업에 대한 평가를 제어 할 수 있다는 것입니다. 대화식 쉘이 항상 읽 .bashrc히면 그 전후에 있어야 .profile합니까? 당신이에 몇 가지 설정하려는 경우 .bashrc어느 것이 .profile당연시을? 그리고 동시에 당신은 어떤 것들에 .bashrc의해 설정된 것에 의존하기를 .profile원합니까? 로드 순서가 두 시나리오를 모두 만족 시키지는 않습니다.
Kaz

11

이것은 잘못된 디자인 결정이나 버그 또는 쉘과 터미널의 예상되는 동작이 아닙니다.

Gnome Terminal에서 프로파일 별 구성 옵션의 유감스러운 기본값 일 뿐이며 쉽게 수정할 수 있습니다.

  1. 편집 -> 프로파일 환경 설정으로 이동 하십시오 .

  2. 제목 및 명령 탭을 선택 하십시오.

  3. 로그인 쉘로 명령 실행 확인란이 선택 해제 되어 있는지 확인하십시오! 확인해 봐.

그게 다야. 이 작업을 Default프로필 또는 새 터미널을 만들 때 사용하도록 구성된 프로필에 수행하면 로그인 셸이 나타납니다.

후드 아래 에서이 옵션을 사용하면 -l옵션이 셸 에 전달 될 수 있습니다.


0

나는 같은 질문을했고 해결책을 찾았습니다 : 실제 로그인 쉘에 SSH를 사용하십시오!

1. 수퍼 유저로서 완전한 격리를위한 전용 rvm 시스템 사용자를 생성하고 암호를 할당하십시오.

sudo su

useradd -m rvmuser

passwd rvmuser

2. rvm이 수퍼 유저 비밀번호를 요구하지 않고 루비를 작성할 수 있도록 종속성을 설치하십시오.

apt-get install curl gawk libreadline6-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 autoconf libgdbm-dev libncurses5-dev automake bison libffi-dev

3. 실제 로그인 쉘을 위해 로컬 호스트에 SSH 연결 (필요할 수도 있음 apt-get install ssh)

ssh rvmuser@localhost

4. rvm 설치

\curl -sSL https://get.rvm.io | bash -s stable

5. 모든 rvm 기능이로드되도록 로그 아웃했다가 다시 로그인하십시오.

exit

ssh rvmuser@localhost

6. rvm을 사용하십시오 :)


0

bash를 사용하여 프로파일 초기화를 배치 할 때 일반적으로 사용 .bash_profile되는데, 로그인시 bash 만 읽지 만 다른 쉘은 이전에 공유했습니다 .profile. 이를 통해 bash 특정 명령을에 배치 할 수 있습니다 .bash_profile.

다음의 정의는 일반적으로에 정의 된 별명을 가져 오기 위해 수행됩니다 .bashrc.

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.