.profile 및 .bashrc가 Mac에서 작동하지 않습니다


29

이 문제는 오랫동안 가지고 있습니다. 터미널 .profile을 실행하면 .bashrc 파일이 작동하지 않습니다 (실행되지 않음). 어디에서 문제의 원인을 찾아야하는지 나타낼 수 있습니까?


이 파일이 적절한 권한을 가지고 있는지 확인하십시오

예 ... 당신은 그 이유가 정말 어리석은 것이 맞습니다-잘못된 권한 chmod + x ~ / .profile 그리고 모든 것이 잘 작동합니다.

5
@xTrol : 이해 ~/.profile가되지 않으며 실행 권한이 필요하지 않습니다. (쉘이 소스를 실행하지만 실행하지는 않습니다). 시도 chmod -x ~/.profile하고 여전히 작동되는지 확인합니다.
키이스 톰슨

답변:


40

나는 .profile달리지 않는 것과 비슷한 문제가 있었다 . ( 이 Apple StackExchange 답변에 설명 된대로 ) 파일 이 .bash_profile있거나 .bash_login파일 이 있으면 .profilebash에서 무시됩니다.


2
내 문제는 Python을 설치하여 .bash_profile 파일을 자동으로 생성하여 .profile이 실행되지 않도록하는 것입니다.

5
이 답변이 도움이됩니다. .bash_login설치 후 추가되었습니다 rvm.

17

이 Q & A가 수퍼 유저에게 가야 할 것 같습니다.

의 섹션 호출에 따르면 man 페이지 ,

  • /etc/profile~/.profile대화 형 로그인 쉘 읽고있다
  • ~/.bashrc 대화 형 비 로그인 셸에 대해 읽습니다.

~/.bashrc대화 형 로그인 셸에서도 다른 UNIX 시스템이 자동으로 읽는 경우 시스템 전체 /etc/ profile에 줄이 표시되어 있기 때문 ~/.bashrc입니다. OS X의 시스템 전체 /etc/profile에는 하나가 없습니다.

따라서 ~/.bashrc대화식 로그인 셸에서도 실행하려면 줄을 포함해야합니다.

. ~/.bashrc

당신의 ~/.profile.


여기 누락 된 부분을 채우려면 : 터미널 쉘 (OP의 질문)은 기본적으로 대화식 로그인 쉘입니다.
LarsH

3

"손으로"소싱하십시오.

source ~/.profile

그리고 어떻게되는지보십시오. 다른 사람들이 지적했듯이 .profile은 로그인 쉘에서, .bashrc는 비 로그인 쉘에서 제공합니다. 둘 다가 아니라 둘 중 하나를 시도하십시오.


2

터미널 환경 설정에서 '시작'창을 확인하십시오. 옵션이 있습니다 :

껍질은 다음과 같이 열립니다 :

  • 기본 로그인 쉘 (/ usr / bin / login)
  • 명령 (완료 경로)

'기본'을 선택했습니다 ... 사용자 정의 명령을 선택하면 그 요인이 될 수 있습니다.

다음으로 확인할 것은 쉘이 로그인 쉘로 시작되었는지 여부입니다. 내가 할 때 ps목록을, 나는 참조 :

  PID TTY           TIME CMD
24088 ttys000    0:00.03 -sh
24614 ttys001    0:00.03 -sh
25127 ttys002    0:00.05 -sh
35544 ttys003    0:00.08 -sh
40926 ttys004    0:00.03 -sh

여기서 핵심 -은 쉘 이름 앞에 있는 ' '입니다. 이것은 쉘에게 프로파일과 관련 내용을 실행하도록 지시합니다. 현재 창에 표시되지 않으면 설정이 표시 될 때까지 수수께끼를 채워야 할 수도 있습니다.

터미널 환경 설정의 설정 창에도 쉘 옵션이 나열됩니다. / bin / sh가 내 목록에 있습니다.


이 필요 없어

최악의 상황이 최악의 경우, 과거에 다른 비협조적인 시스템에서했던 것처럼 당신도 할 수 있습니다. 나는 윈도우에서 실행할 수있는 'loginsh'프로그램을 만들었고, ' -' 로그인 쉘로 작동하도록 지시합니다.

#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include "stderr.h"
#include "jlss.h"

#ifndef DEFAULT_SHELL
#define DEFAULT_SHELL   "/bin/sh"
#endif /* DEFAULT_SHELL */

#ifndef MAX_SHELLBASENAME
#define MAX_SHELLBASENAME   256
#endif /* MAX_SHELLBASENAME */

#ifndef lint
static const char sccs[] = "@(#)$Id: loginsh.c,v 4.2 2005/06/22 19:44:07 jleffler Exp $";
#endif

int main(int argc, char **argv)
{
    char     *shell;
    char      shellname[MAX_SHELLBASENAME];

    err_setarg0(argv[0]);

    /* Which shell to use? */
    if ((shell = getenv("SHELL")) == (char *)0)
        shell = DEFAULT_SHELL;

    /* Set up argv[0] in new argument list; reuse old argv space */
    shellname[0] = '-';
    strcpy(&shellname[1], jlss_basename(shell));
    argv[0] = shellname;

    /* Execv must work -- the shell must be an executable program */
    execv(shell, &argv[0]);
    err_syserr("cannot execute shell %s\n", shell);

    /* NOTREACHED */
    return(EXIT_FAILURE);
}

( "stderr.h"헤더 및 ' err_*'루틴은 모든 곳에서 사용하는 오류보고 패키지입니다.이 jlss_basename()기능은 기본적으로 POSIX에서 제공되는 시스템 제공 버전과 동일 <libgen.h>합니다.)


2

위의 좋은 정보이지만 내가 가진 문제와 내가 찾은 해결책에 대해 구체적으로 이야기 할 것이라고 생각했습니다.

필요 : OSX 10.8 (ML)에서 PATH에 디렉토리를 추가하십시오.

문제 : 지침은 종종 "홈 디렉토리의 .profile을 수정"합니다. 기본적으로이 파일은 OSX에 존재하지 않기 때문에 약간 혼란 스럽습니다. 내보내기 디렉토리를 추가하여 기존 디렉토리에 새 디렉토리를 추가하면 작동하지 않기 때문에 혼동됩니다. 위에 덮여있다.

해결책 : 내 .bash_profile (홈 디렉토리에도 있음)에 내보내기 문을 추가했습니다.

나는이 고양이를 껍질을 벗기는 방법이 많이 있다고 확신한다. 이것은 나를 위해 일했습니다. 다소 자신감이 생겼습니다 : .bash_profile이 이미 존재하며 설치된 다른 소프트웨어 (예 : Ruby)가 수정했음을 알 수 있습니다. 더 나은 해결책이 있다면 기뻐할 것입니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.