bashrc 명령이 쉘 재로드를 지원해야 합니까?

bashrc 명령이 쉘 재로드를 지원해야 합니까?

사용자가 새 터미널을 열지 않고 셸을 다시 로드할 때마다 exec $SHELL파일이 bashrc다시 실행됩니다.

문제는 다음과 같습니다

쉘이 시작될 때 실행되도록 의도된 명령이 이를 명시적으로 지원해야 합니까?

물론 셸 기능은 셸 프로세스 교체 이후에도 유지될 수 없지만 환경 변수는 가능합니다. 따라서 일반적인 부작용은 PATH물건을 여러 번 추가하는 것입니다.

객관적인 입장을 유지하기 위해 저는 이에 대한 공식적인 지침이 있는지 여부에 주로 관심이 있습니다.

답변1

.bashrc파일은 귀하의 항목을 보관하도록 설계되었습니다생각하다새로운 대화형 셸이 시작될 때마다 실행됩니다. 이는 변수를 설정하기에 적합한 위치가 아닙니다 PATH. 예를 들어 각 셸 초기화에서 실행해야 하는 항목만 포함해야 합니다.

이것이 바로 bash 프로필의 두 "계열"이 있는 이유입니다.

  • /etc/bashrc, ~/.bashrc새로운 책을 읽을 때마다 대화형 쉘그건로그인 쉘이 아님시작되었습니다.

  • /etc/profile~/.bash_profile, ~/.bash_login및 (순서대로) 새로운 대화형 로그인 쉘이 시작될 때마다 획득됩니다 .~/.profile

실제로 대부분의 시스템에서 이는 로그인할 때 이 파일 세트를 한 번 읽은 다음 새 터미널을 열거나 새 대화형 셸을 시작할 때마다 ~/.profile읽힌다는 것을 의미합니다.~/.bashrc

따라서 새 셸을 시작할 때마다 무언가가 실행되어 ~/.bashrc문제를 일으키는 경우 시스템이 잘못 구성되어 ~/.bashrc사용 중임을 의미합니다.~해야 한다~/.bash_profile또는 를 사용하세요 ~/.profile. 즉, .bashrc새로운 대화형 비로그인 셸이 시작될 때마다 반드시 실행되어야 합니다.

답변2

/etc/profile에 있는 이 기능을 사용할 수 있습니다.

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            [ ! -d "$1" ] && return
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

디렉터리를 추가하기 전에 디렉터리가 이미 PATH에 있는지 확인합니다.

~/.profile 또는 ~/.bash_profile에서 이것을 사용하십시오:

path_munge /directory/to/add before
# or
path_munge /directory/to/add/also after

PATH에 필요한 디렉터리를 추가합니다.

/etc/profile은 이 기능을 억제하므로 자신의 프로필에 복사하세요.

관련 정보