아이디어는 사용자에게 호스트 당 하나의 로그인 쉘이 있어야한다는 것입니다. (아마도 터미널 당 호스트 당 하나의 로그인 셸을 말해야합니다. 여러 터미널을 통해 동시에 호스트에 로그인 한 경우 여러 개의 로그인 셸이있을 것으로 예상됩니다.) 일반적으로 (항상?)이 첫 번째 셸입니다. 로그인 할 때 (따라서 이름). 따라서이 체계를 사용하면 로그인 당 한 번만 수행하려는 작업과 새 (대화식) 셸을 시작할 때마다 수행 할 작업을 지정할 수 있습니다.
일반적으로 로그인 후 실행하는 다른 모든 쉘은 로그인 쉘의 하위 항목 (자식의 자식의 하위 항목)이므로 로그인 쉘의 많은 설정 (환경 변수 umask
등)을 상속 합니다. 따라서 로그인 초기화 파일 ( .login
, .profile
등)은 상속 가능한 설정을 설정하고 내 보내지 않은 셸 변수 .bashrc
( set
,, shopt
등)
또 다른 개념은 로그인 초기화 파일 (및 파일 만)이 "무거운 작업", 즉 리소스 집약적 인 작업을 수행해야한다는 것입니다. 예를 들어, 로그인 할 때마다 특정 프로세스가 백그라운드에서 실행되도록 할 수 있습니다 (단 하나의 사본 (인스턴스) 만). 로그인 할 때 새로운 대화식 쉘을 시작할 때마다 일부 상태 정보 (예 : df
또는 who
)가 표시되도록 할 수 있습니다. 특히 대화식 이있는 경우로그인 할 때마다 실행하려는 프로그램 / 대화 상자 (즉, 입력이 필요한 프로그램)는 새 셸을 시작할 때마다 실행하지 않으려는 경우가 있습니다. 극단적 인 예를 들어, 20 년 전에 Solaris는 그래픽이 아닌 단일 윈도우가 아닌 쉘에 로그인했습니다. (그 이후로 변경되었다고 생각합니다.) 와 같은 명령을 사용하여 윈도우 시스템을 시작하는 것이 .login
또는 .profile
(또는 무엇이든) 일이었습니다 startx
. (이는 여러 개의 윈도우 시스템을 사용할 수 있었기 때문에 부분적으로 유용했습니다. 사용자마다 다른 환경 설정을 사용했습니다. 일부 사용자는 다른 상황에서 다른 .profile
시스템을 사용했으며 "오늘 윈도우 시스템을 사용 하시겠습니까?" 라는 대화 상자가있었습니다. ) 분명히, 당신은 새 창을 열거 나 입력 할 때마다 실행을 원하지 않을 것입니다sh
.
bash
엣지 케이스를 제외하고는 다른 것을 사용한 지 오래되었습니다 . (예를 들어, #!/bin/sh
일부 시스템에서는 스크립트가로 실행 dash
되고 다른 스크립트 bash
는 POSIX 모드로 실행되는 스크립트를 작성 합니다. 일 년에 몇 번 csh
/ tcsh
몇 분 동안 실행 하여 무언가를 처리하는 방법을 보거나 질문에 답하십시오.) 매일 여러 개의 쉘 (예 : bash
및 zsh
)을 사용하는 경우 패턴이 다를 수 있습니다. 기본 쉘 (에 정의 된대로 /etc/passwd
)이 bash
인 경우 zsh
로그인 쉘 을 호출 한 다음 그에 zsh
종속 된 일부 대화식 비 로그인 쉘 을 호출 할 수 있습니다 . 동일한 유형의 다른 로그인 쉘에 종속 된 로그인 쉘을 사용하지 않아야합니다.
Login Shell과 Non-Login Shell의 차이점 에서 언급했듯이 ? OS X 터미널 응용 프로그램은 로그인 셸을 실행하므로 일반 사용자는 일반적으로 여러 "로그인 셸"을 동시에 실행합니다. 이것은 내가 전술 한 것과 다소 다른 모델이며, 그가에서 무엇을 재고하도록 사용자에게 요구할 수 있습니다 자신의 .login
또는.profile
(또는 무엇이든) 파일. OS X 개발자가이 디자인 결정에 대한 근거를 문서화했는지 여부를 모르겠습니다. 그러나 이것이 유용한 상황을 상상할 수 있습니다. 내가 로그인 할 때 습관적으로 소수의 쉘 창을 열었던 때가 있었고, ANSI 이스케이프 시퀀스를 화면에 작성하여 다른 텍스트 및 배경색으로 설정하여 어느 것이 어느 것인지 추적하는 데 도움이되었습니다. 터미널 색상은 어린이의 자녀가 물려받지 않지만 창 내에서 유지되는 무언가의 예입니다. 따라서 이것은 새로운 터미널 창을 시작할 때마다하고 싶지만 새로운 대화식 쉘을 시작할 때마다하지 않는 일종의 작업입니다.