MacOS: Mac의 로그인 및 비로그인 쉘용 쉘 시작 스크립트는 무엇입니까?

MacOS: Mac의 로그인 및 비로그인 쉘용 쉘 시작 스크립트는 무엇입니까?

/etc/profile, ~/.bash_profile, ~/.profile, ~/.bash_login나는 새 셸을 열 때 실행되는 Ubuntu의 시작 스크립트( 로그인 셸과 /etc/bash.bashrc, ~/.bashrc비로그인 셸용) 에 대해 배웠습니다 . Ubuntu를 실행하는 컴퓨터가 있고 해당 컴퓨터의 순서가 이와 일치합니다.

그러나 MacOS의 경우 파일과 실행 순서가 다른 것으로 보입니다. 홈 디렉토리에는 또는 이 /etc/bash없습니다 . 가장 이상한 점은 이 모든 파일에 echo 문을 넣을 때 Terminal.app을 열 때마다 두 파일을 모두 클릭한다는 것입니다. 로그인 셸에 있는 경우 첫 번째 셸을 클릭하면 안 되나요? 아래를 참조하세요. 처음 세 줄은 내 에코 문이고, 네 번째 줄은 로그인 셸에 있다는 확인입니다./etc/bash.bashrc~/.profile~/.bash_login/etc/profile/etc/bash

In /etc/profile
In /etc/bashrc
In ~/.bash_profile for user: davidkennell
Davids-MacBook-Pro:~ davidkennell$ shopt login_shell
login_shell     on

지금까지 내가 내린 결론은 Mac의 쉘 시작 스크립트는 둘 다 Unix 기반임에도 불구하고 Ubuntu의 것과 완전히 다르다는 것입니다. Mac에서 로그인/비로그인 셸을 초기화할 때 어떤 파일이 어떤 순서로 실행되는지에 대한 정보는 어디서 얻을 수 있나요?

답변1

이것은 (대부분)에 설명되어 있습니다.시작 파일에 대한 Bash 매뉴얼 섹션.

간단히 말해서:

  • /etc/profile로그인 쉘로 획득

  • 그런 다음 사용 가능한 첫 번째 ~/.bash_profile, ~/.bash_login및 을 가져옵니다 ~/.profile.

    우분투에는 기본적으로 또는 가 없으므로 ~/.bash_profile소스입니다. 쉘이 bash일 때 우분투(뭐, 데비안)의 소스 코드:~/.bash_login~/.profile~/.profile~/.bashrc

    # if running bash
    if [ -n "$BASH_VERSION" ]; then
        # include .bashrc if it exists
        if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
        fi
    fi
    

    ~/.profile그러나 이는 다른 배포판이나 운영 체제에서는 그렇지 않은 경우가 많습니다.

  • 데비안(및 우분투)은 다음을 사용합니다.특별한 옵션활성화하려면 /etc/bash.bashrc이 기능은 macOS에서는 사용되지 않습니다. 대신 적어도 Catalina에서는 /etc/profile소스 /etc/bashrc(Ubuntu와 유사 ~/.profile)는 다음과 같습니다.

    # cat /etc/profile
    # System-wide .profile for sh(1)
    
    if [ -x /usr/libexec/path_helper ]; then
        eval `/usr/libexec/path_helper -s`
    fi
    
    if [ "${BASH-no}" != "no" ]; then
        [ -r /etc/bashrc ] && . /etc/bashrc
    fi
    

관련 정보