비대화형 로그인 쉘이 "~/.profile" 또는 "$BASH_ENV"라는 파일을 실행합니까?

비대화형 로그인 쉘이 "~/.profile" 또는 "$BASH_ENV"라는 파일을 실행합니까?

~에서배쉬 매뉴얼

대화형 로그인 셸로 호출되거나 --login을 사용하여 호출됩니다.

Bash가 대화형 로그인 셸로 사용되거나--login 옵션이 있는 비대화형 쉘, 먼저 /etc/profile 파일(파일이 존재하는 경우)에서 명령을 읽고 실행합니다. 파일을 읽은 후 ~/.bash_profile, ~/.bash_login, ~/.profile을 순서대로 찾아 존재하고 읽을 수 있는 첫 번째 파일부터 명령을 읽고 실행합니다. 이 동작은 셸을 시작할 때 --noprofile 옵션을 사용하여 비활성화할 수 있습니다.

대화형 로그인 쉘이 종료되거나 비대화형 로그인 쉘이 종료 내장 명령을 실행하면 Bash는 ~/.bash_logout 파일(존재하는 경우)에서 명령을 읽고 실행합니다.

대화형 비로그인 셸로 호출됨

...

비대화형 통화

배쉬가 시작될 때비대화형으로예를 들어, 쉘 스크립트를 실행하려면 환경에서 BASH_ENV 변수를 찾아 그 값이 나타나면 확장하고, 확장된 값을 읽고 실행할 파일 이름으로 사용합니다. Bash는 다음 명령이 실행된 것처럼 동작합니다.

if [-n "$BASH_ENV"]; "$BASH_ENV";

그러나 PATH 변수의 값은 파일 이름을 검색하는 데 사용되지 않습니다.

위에서 언급했듯이 --login 옵션을 사용하여 비대화형 셸을 호출하면 Bash는 로그인 셸 시작 파일에서 명령을 읽고 실행하려고 시도합니다.

비대화형 로그인 쉘은 첫 번째 상황 또는 세 번째 상황 중 어떤 상황에 속합니까?

첫 번째 사례인 "대화형 로그인 쉘로 호출되거나 --login을 사용하여 호출됨"에는 "--login 옵션이 있는 비대화형 쉘" 시나리오가 포함되어 있으므로 다음과 같이 추론했습니다.

  • 첫 번째 경우는 대화형이든 비대화형이든 상관없이 로그인 셸입니다.

  • 세 번째 경우는 비대화형 비로그인 쉘입니다.

내가 맞나요?

감사해요.

답변1

아니요, 당신은 틀렸습니다. Bash는 문서화된 대로 작동합니다.

  • 첫 번째 부분은 대화형 로그인 쉘뿐만 아니라 플래그로 시작되는 비대화형 쉘에도 적용됩니다 --login.
  • 세 번째 부분은 비대화형 로그인 쉘을 포함한 비대화형 쉘에 적용됩니다.아니요플래그부터 시작하세요 --login.

쉘은 --login플래그가 없는 로그인 쉘일 수 있습니다. Linux 시스템에서 SSH를 통해 시작된 Bash 셸을 보면 /proc/$$/cmdline다음과 같이 시작되는 것을 볼 수 있습니다 -bash. 선행 하이픈은 로그인 셸을 시작하는 일반적인 방법이며 비대화형으로 끝나는 경우 첫 번째 부분에 포함되지 않습니다. . 그러나 어떤 이유로 사람들이 비대화형 로그인 셸을 원하는 경우 일반적으로 이를 사용하여 --login이를 얻습니다.

관련 정보