/ etc / profile이 소스되지 않습니다


45

11.04의 경우 시스템을 새로 설치했습니다. 의 일부는 설치했다 설치를 RVM을 붙어있는 rvm.sh/etc/profile.d/. /etc/profile(각 + r을로드하는) 이로 드되지 않아 작동하지 않습니다 /etc/profile.d/*.sh. 문서에 따르면, bash가 로그인에서 실행되는 경우에만 프로파일이 제공됩니다. 이를 확인하기 위해을 호출 bash --login한 후 rvm사용할 수있었습니다.

이것은 이전 버전의 우분투에서 아무런 구성없이 작동했습니다. 즉, 10.10을 새로 설치하면 profile / .d가 올바르게 소스됩니다.

내 질문은 : 내가 잘못하고있는 것이 있습니까, 아니면 이것을 깨뜨린 Natty에서 새로운 가정이 있습니까? 내 현재 해결 방법은 source /etc/profilein입니다 ~/.bashrc(프로필이 bashrc 보다 먼저 로드 되어야 하지만 트릭을 수행 하기 때문에 끔찍 합니다).

답변:


52

기본적으로 gnome-terminal은 bash를 로그인 쉘로 시작하지 않습니다 (나는 gnome-terminal 내부에서 bash가 시작되었다고 가정합니다). bash는 /etc/profile또는을 읽지 않습니다 ~/.profile. 올바르게 관찰했듯이, bash는 로그인 쉘로 시작된 경우 해당 파일을 읽습니다.

문제를 빠르게 해결하려면 gnome-terminal을 구성하여 bash를 로그인 쉘로 시작하여 읽습니다 /etc/profile. 그렇게하려면 편집 메뉴에서 도달 할 수있는 그놈 터미널 "프로필 환경 설정"에서 "로그인 명령으로 명령 실행"을 활성화해야합니다.

~/.profile와 사이의 구분을 엉망으로 만들기 때문에이 작업을 수행하지 않는 것이 좋습니다 ~/.bashrc. 이상적으로 ~/.profile는 로그인하는 동안 한 번만 필요한 ~/.bashrc작업을 수행하고 bash가 시작될 때마다 필요한 작업을 수행해야합니다.

수퍼 유저 에게는 bashrc와 profile의 차이점에 대한 질문과 답변 이 있습니다 . 자세한 내용은 여기를 읽으십시오.

문제 설명에서 로그인하는 동안 rvm 스크립트를 한 번만로드 해야하는 것으로 보입니다. 내가 아는 한 우분투는 읽을 수있는 그래픽 로그인을 구성한 /etc/profile/하고 ~/.profile. 즉, 로그 아웃 한 후 한 번 로그인하면 rvm 스크립트가 활성화되어 있어야합니다. 그래도 작동하지 않으면 모든 bash 세션에 대해 rvm 스크립트를로드해야합니다. 이 경우 bashrc스크립트에 가장 적합한 위치입니다.


'로그인 쉘로 실행 명령'을 설정하면 실제로로드되었습니다 /etc/profile(따라서 .d). 설명 주셔서 감사합니다-이것은 rvm 사람들과 후속 조치가 필요한 것 같습니다.
Marc

7
11.04 우분투 읽을하지 않는 것 /etc/profile~/.profile로그인시. 항상 이전 버전에서 작동했기 때문에 이상합니다. 나는 이것이 해결책이 아니라 해결책이라고 생각합니다.
Luca

2
@lesmana GUI 대신 CLI에서 "로그인 명령으로 명령 실행"을 활성화 할 수있는 방법이 있습니까? 원격 서버에 연결되어 X를 로컬로 전달할 수 없습니다.
Waseem

5

그러나 /etc/bash.bashrc gnome-terminal에서 읽은 파일 이 있으며 "대화식 bash (1) 셸의 시스템 전체 .bashrc 파일"입니다.

rvm 함수에 대한 호출이 [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"들어가서 해당 시스템의 두 사용자에게 적합합니다.


그놈 터미널은 그 어떤 것도하지 않습니다. gnome-terminal은 대화식 모드에서 bash (또는 사용자의 로그인 셸이 passwd 데이터베이스에 설정된 모든 항목)를 실행하고 bash는 대화식으로 읽기 시작했습니다 /etc/bash.bashrc. 글쎄, 적어도 데비안 / 우분투에서는. Bash는 일반적으로 시스템 전체 bashrc를 읽지 않습니다. 데비안은 그것을 패치했다.
geirha

@geirha : dmitri @ Eos : ~ $ uname -a Linux Eos 3.0.0-16-generic # 29-Ubuntu SMP 화 2 월 14 일 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux dmitri @ Eos : ~ $ cat / etc / bash.bashrc # 대화식 bash (1) 쉘을위한 시스템 전체의 .bashrc 파일. # 로그인 쉘에 대해서도이 파일의 설정 / 명령을 활성화하려면 #이 파일은 / etc / profile에서 제공되어야합니다. # 대화식으로 실행되지 않는 경우, [-z "$ PS1"] && return .....을 수행하지 마십시오.
Dmitri

2
예, 분명히 gnome-terminal은 bash를 호출하여 해당 파일을 읽습니다. 쉘이 ksh이면 gnome-terminal은 해당 파일을 읽지 않을 것입니까? "아무것도하지 않습니다"와 같은 도발적인 문구를 계속 사용하기 전에 사전에서 "pedant"라는 단어를 찾아 보는 것이 좋습니다.
Dmitri

4

다중 사용자로 RVM을 설치하려면 사용자가이 명령을 실행해야합니다.

(우분투는 로그인시 /etc/profile.d를 소스하지 않기 때문에)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

3
우분투는 /etc/profile.d/로그인 하는 동안 파일을 소싱합니다 . 기본값 은의 파일을 /etc/profile반복 하고 소싱 하기 때문 입니다 /etc/profile.d/. 그러나 여기에 rvm.sh함수 나 별명과 같은 대화식 쉘용 코드가 포함되어 있으면 소스 /etc/profile가없는 것은 의미가 없습니다. 대화식 bash 세션 설정은에 있어야합니다 .bashrc.
geirha


0

나는 다음을 절대적으로 요구하지 않는 한 상자를 완전히 다시 시작하지 않는 사람들을 실제로 발견했습니다 ...

변경 사항을 적용하기 /etc/profile위해 전체 시스템을 다시 시작할 필요는 없습니다 . XWindows Desktop GUI를 다시 시작하여 구성 전체를 다시 읽도록하면됩니다 (시스템 전체 다시 시작의 일부로 시작된 것처럼).

나에게 LightDM을 사용하는 xUbuntu를 사용하지만 현재 데스크탑을 호출하는 실행 파일에 하위를 둘 수 있습니다.

첫째, 데스크탑 GUI 자체에서 터미널 에뮬레이터를 사용 하여이 작업을 수행 할 수는 없습니다 (적어도 LightDM은 사용하지 않음) SSH 또는 보조 콘솔을 사용해야합니다 (Ctrl + Alt를 누른 상태에서 F 키 또는 숫자 키를 누르면 그래픽 데스크탑 로그인 또는 화면에서 일반 터미널 창으로 이동해야합니다. SSH를 사용하는 경우 VNC와 같은 원격 데스크톱 항목을 닫는 것이 좋습니다 (SSH를 연결할 수는 있지만 다시 시작하려고 시도하는 동안 열린 VNC 창을 폴링 표시하지 않으려는 경우 다시 시작이 중단 될 수 있음) VNC 세션이 종료 될 때까지 기다립니다).

나는 SSH로 이것을 항상하고 특히 기계에 의해 물리적으로 있지 않고 완전히 다시 시작하기를 기다리고 다시 느끼고 싶지 않을 때 큰 생명의 은인입니다 :-D

이제 "보조"터미널 또는 SSH 문제에서 한 번만 쉽게 수행 할 수있는 부분 : (예, 현재 세션이 종료됩니다.

sudo service lightdm restart

바탕 화면을 종료 한 다음 다시 시작하면서 잠시 기다립니다 (일이 중지 된 다음 시작시 다시 실행되는 데 몇 초가 걸릴 수 있음)

이제 콘솔 0으로 돌아가거나 VNC를 사용하여 다시 연결하면 로그인 프롬프트가 표시되고 정상적으로 로그인합니다. 터미널 에뮬레이터를 열고 명령을 실행하면 이제 마치 전체 머신을 재시작 한 것처럼 모든 것이 리 소싱 되었기 때문에 문제가 없습니다.

터미널 에뮬레이터를 사용하여 데스크탑 환경 자체에서 sudo service lightdm restart[또는 stop, start무엇이든] 을 발행 하면 명령이 중단되고 아무 일도 일어나지 않을 것입니다. 현재 해당 콘솔 (일명 디스플레이) 0을 사용하고 있기 때문에 명령을 실행하기 전에 데스크탑이 사용 중이 아닐 때까지 완전히 다운되어 다시 시작할 수 없기 때문입니다.

마지막 참고 사항 : 터미널 에뮬레이터의 데스크탑 내에서 환경을 다시 시작한 다음 다른 콘솔로 전환 한 다음 다시 시작할 수는 있지만 이미 콘솔을 전환하려는 경우 명령을 실행하지 않는 이유는 무엇입니까? 어쨌든 있어야하기 때문에 거기에서?


-4

echo ". .profile">> ~ / .bashrc

그런 다음 다른 창을여십시오. 나는 이것이 쉬운 접근 방법이라고 생각합니다.


1
기본 .profile소스 이므로 .bashrc대부분의 사용자에게 루프가 발생합니다.
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.