나는 기본적인 이해를 가지고있다.파일 클릭*nix 시스템에서. 하지만 난 아직도 이 부분이 헷갈린다.로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?
여러 중복을 포함하여 다양한 답변이 다음 문제를 해결했습니다.
- 어떻게옮기다ㅏ로그인또는로그인하지 않았습니다껍데기
- 어떻게발각ㅏ로그인또는로그인하지 않았습니다껍데기
- 무엇시작 파일소모될 것이다로그인또는로그인하지 않았습니다껍데기
man bash
자세한 내용은 설명서(예: )를 참조하세요.
대답이 우리에게 알려주지 않는 것(그리고 내가 여전히 혼란스러워하는 것)은 다음과 같습니다.
무엇인가요예중 하나로그인또는로그인하지 않았습니다껍데기? (예를 들어, 저는 이것만 구성했는데 대부분의 개인 개발 요구 사항에 충분
zshrc
하며 "무엇을 해야 하는가"zsh
만큼 간단하지 않다는 것을 알고 있습니다 .)vimrc
vim
무엇인가요이유사용하다로그인~ 위에로그인하지 않았습니다쉘(다른 시작 파일 및 라이프사이클을 사용하는 것 외에)?
답변1
아이디어는 호스트에 사용자당 (최대) 하나의 로그인 셸이 있어야 한다는 것입니다. (아마도 호스트당 터미널당 하나의 로그인 쉘이라고 말해야 할 것입니다. 여러 터미널을 통해 동시에 호스트에 로그인한 경우 여러 개의 로그인 쉘이 있을 것으로 예상할 수 있습니다.) 이것은 일반적으로 (항상?)첫 번째로그인 후 얻는 쉘(따라서 이름)입니다. 따라서 이 체계를 사용하면 로그인당 한 번만 발생하는 작업과 새(대화형) 셸이 시작될 때마다 발생하려는 작업을 지정할 수 있습니다.
대개,모든로그인 후에 실행되는 다른 쉘은 로그인 쉘의 자손(후손의 자손...)이 되므로 umask
로그인 쉘로부터 많은 설정(환경 변수 등)을 상속받습니다. 따라서 로그인 초기화 파일( .login
, .profile
등)은 상속 가능한 설정을 설정하고 (또는 사용하는 다른 파일)이 .bashrc
( , , 내보내지 않은 셸 변수) 등이 아닌 설정을 처리하도록 해야 합니다. )set
shopt
또 다른 개념은 로그인 초기화 파일(및 해당 파일만)이 "과중한 작업", 즉 리소스 집약적인 작업을 수행해야 한다는 것입니다. 예를 들어, 로그인할 때 일부 프로세스가 백그라운드에서 실행되도록 하려고 할 수 있습니다(단, 복사본(인스턴스)은 하나만). 로그인 시 일부 상태 정보(예: 또는 df
) 를 표시하려고 할 수 있지만 who
새 대화형 셸을 시작할 때마다 표시할 수는 없습니다. 특히 당신이 가지고 있다면인터렉티브로그인할 때마다 프로그램/대화 상자가 실행되도록 하려면(예: 사용자 입력이 필요한 프로그램) 새 셸을 시작할 때마다 프로그램/대화 상자가 실행되는 것을 원하지 않을 것입니다. 극단적인 예를 들자면, 20년 전 솔라리스에서는 그래픽이나 창이 아닌 단일 쉘에 로그인할 수 있었습니다. (그 이후로 변경되었다고 생각합니다.) 또는 .login
(또는 무엇이든) 작업은 .profile
다음과 같은 명령을 사용하여 윈도우 시스템을 시작하는 것 입니다. (여러 창 시스템을 사용할 수 있기 때문에 부분적으로 유용합니다. 사용자마다 선호도가 다릅니다. 일부 사용자는 상황에 따라 다른 시스템을 사용하며 "오늘 어떤 창 시스템을 사용하시겠습니까?" startx
라고 묻는 대화 상자가 표시됩니다. ) .profile
분명히 새 창을 열거나 를 입력할 때마다 실행하고 싶지는 않을 것입니다 sh
.
bash
엣지케이스 이외의 용도 로는 사용한지 오래되었습니다 . ( 예 를 들어 , 일부 콘텐츠를 작성하거나스크립트를#!/bin/sh
사용하여 및 ) 패턴이 다를 수 있습니다. 기본 셸( 에 정의됨 )이 인 경우 로그인 셸 을 호출 한 다음 해당 셸에 종속된 일부 대화형 비로그인 셸을 호출할 수 있습니다. 하나의 로그인 쉘이 동일한 유형의 다른 로그인 쉘에 종속되는 것을 피해야 합니다.dash
bash
csh
tcsh
bash
zsh
/etc/passwd
bash
zsh
zsh
에서 언급했듯이로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?, OS X 터미널 응용 프로그램은 로그인 셸을 실행하므로 일반 사용자는 동시에 여러 개의 "로그인 셸"을 실행하는 경우가 많습니다. 이것은 위에서 설명한 것과는 다소 다른 모델이며 사용자가 자신의 파일 .login
이나 (또는 다른) 파일 .profile
에서 무엇을 하고 있는지 재고해야 할 수도 있습니다. OS X 개발자가 이러한 디자인 결정에 대한 이론적 근거를 문서화했는지 여부는 알 수 없습니다. 하지만 이 경우에는 유용할 것이라고 생각합니다. 로그인할 때 습관적으로 몇 개의 셸 창을 열고 다른 텍스트와 배경색으로 설정했던 때가 있었습니다(화면에 ANSI 이스케이프 시퀀스를 작성하여). 어느 것이 어느 창인지 추적하는 데 도움이 되었습니다. 터미널 색상은 자식에게 상속되지 않지만 창 전체에 걸쳐 지속되는 색상의 예입니다. 따라서 이것은 새 터미널 창을 시작할 때마다 수행하고 싶은 작업이지만 새 대화형 셸을 시작할 때마다 수행하려는 작업은 아닙니다.