Mac OS X에서 ~ / .bashrc가 아닌 이유는 무엇입니까? [복제]

이 질문에는 이미 답변이 있습니다.

나는 많은 사람들이 왜 이런 명령이 비슷한 지 알아 냈습니다.

Put X to your ~/.bashrc and you can do Y

작동하지 않습니다.

Mac OS X의 bash 시작 파일 (또는 Mac의 Bash 자체)은 ~ / .bashrc 파일을 로그인 쉘 또는 Mac OS X의 터미널 응용 프로그램과 같은 창 시스템에서 생성 된 쉘에서 소스하지 않습니다.

Bash가있는 다른 모든 유닉스 계열 시스템이 이전 에이 작업을 수행했을 때 왜 이것이됩니까?

추신:

시작 파일에 대해 Bash 자체가 말한 것을 발견했습니다 (유용 할 수 있음).

Bash가 대화식 로그인 쉘 또는 –login 옵션을 사용하는 비 대화식 쉘로 호출되면 파일이 존재하는 경우 먼저 / etc / profile 파일에서 명령을 읽고 실행합니다. 해당 파일을 읽은 후 ~ / .bash_profile, ~ / .bash_login 및 ~ / .profile을 순서대로 찾고 존재하고 읽을 수있는 첫 번째 파일에서 명령을 읽고 실행합니다. 이 동작을 막기 위해 쉘을 시작할 때 –noprofile 옵션을 사용할 수 있습니다.

출처 : http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files



답변

OSX에서 터미널은 기본적으로 로그인 세션을 시작하므로 .bash_profile 등을 읽습니다 (사용자 이름 및 비밀번호를 요청하는 GUI 로그인 프로세스는 쉘 스크립트를 사용하지 않으며 쉘을 시작하지 않음).

다른 Unices에서 xterm은 기본적으로 비 로그인 쉘을 실행하므로 로그인 세션에서 비밀번호 등을 제공하는 스크립트로 .bashrc를 읽고 로그인 세션을 호출하고 모든 터미널은 이것의 하위 프로세스이며 쉘 환경을 상속합니다.

언급 한 GNU 문서에서

대화 형 비 로그인 셸로 호출

로그인 쉘이 아닌 대화식 쉘이 시작될 때 Bash는 ~ / .bashrc에서 해당 파일이있는 경우 명령을 읽고 실행합니다. –norc 옵션을 사용하여이를 방지 할 수 있습니다. –rcfile 파일 옵션은 Bash가 ~ / .bashrc 대신 파일에서 명령을 읽고 실행하도록합니다.

따라서 일반적으로 ~ / .bash_profile에는 다음 줄이 포함됩니다.

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

로그인 별 초기화 후 (또는 이전)


답변

bash단지 읽기 .bashrc에 대한 비 로그인 쉘 :

로그인 쉘이 아닌 대화식 쉘이 시작될 때 bash는 ~ / .bashrc에서 해당 파일이있는 경우 명령을 읽고 실행합니다. –norc 옵션을 사용하여이를 방지 할 수 있습니다. –rcfile 파일 옵션은 bash가 ~ / .bashrc 대신 파일에서 명령을 읽고 실행하도록합니다.

터미널이 bash로그인 쉘로 시작함에 따라 ( 인스턴스가로 실행되는지 w확인하기 위해 bash실행 -bash) .bashrc자동으로 읽히지 않습니다.