답변에 따르면로그인 쉘과 비로그인 쉘이란 무엇입니까?Ask Ubuntu에서 GNOME 터미널은 비로그인 쉘입니다. 이 훌륭한 책이 지적하듯이,Fedora 및 Red Hat Enterprise Linux 실용 가이드, 제6판:
대화형 비로그인 셸은 ~/.bashrc 파일의 명령을 실행합니다. 기본 ~/.bashrc 파일은 /etc/bashrc를 호출합니다.
따라서 /etc/profile
비로그인 쉘에서는 처리되지 않습니다. 그러나 PATH
변수 에 Java 홈 경로를 추가했고 GNOME 터미널을 사용하여 명령을 실행했을 때 java
모든 것이 잘 작동한다는 사실을 발견했습니다. 또한 이 변수의 값은 PATH
에서 정의한 값과 동일합니다 /etc/profile
.
위의 사실을 종합해 보면 갈등이 있는데, 제가 이해한 부분에 문제가 있는 걸까요?
답변1
/etc/profile
(일반적으로 일부 그래픽 쉘에서는 읽지 않지만 분명히 귀하의 경우입니다)는 디스플레이 관리자 또는 tty를 통해 x 세션에 로그인할 때 쉘 프로그램에 의해 선택됩니다. 그 후 로컬 파일(여기서는 bash를 사용한다고 가정)을 가져오거나 ~/.bash_profile
여기에 정의된 모든 환경 변수를 현재 사용자에 대해 덮어씁니다. 이 환경은~/.bash_login
~/.profile
/etc/profile
유전학세션에서 열린 쉘을 통해. 그렇기 때문에 우리는환경 변수 정의, 예를 들어 이러한 파일의 PATH입니다.
gnome-terminal을 열면 기본적으로 비로그인 쉘이 시작되지만 로그인 쉘이나 그래픽 쉘에서 로드된 사용자 환경을 상속합니다. 대화형 셸을 시작할 때(예: gnome 터미널 열기) 획득 하므로 ~/.bashrc
재정의하는 데 사용할 수 있습니다.일부환경 요소(예: PS1)
(gnome-terminal 자체는 쉘이 아닌 애플리케이션입니다)
답변2
짧은: 없음
긴: gnome-terminal은 터미널입니다. 터미널에서 쉘을 실행합니다. 터미널에서 두 가지 유형의 쉘(로그인 여부에 관계없이)을 실행할 수 있습니다(gnome-terminal은 다른 터미널보다 어렵습니다).
추가 자료:
답변3
이것을 시도해 보세요. BASH에서 작동합니다.
shopt -q login_shell && echo " <<< It's a Login Shell >>> " || echo " <<< It's \"NOT\" a Login Shell >>> "
그런데 Gnome Terminal은 쉘(더 구체적으로 BASH)을 사용하는 터미널 에뮬레이터(응용 프로그램)일 뿐입니다.