RVM + TMUX - $PATH에 중복된 항목이 있습니다.

RVM + TMUX - $PATH에 중복된 항목이 있습니다.

내 Linux 터미널 프로필(.bash_profile, .profile, .bashrc)은 앞에 일부 사용자 지정 디렉터리를 추가하여 $PATH를 확장합니다. 이는 한 번만 발생합니다(그리고 한 번만 발생하도록 강제하기 위해 일부 ENV 변수 기반 가드도 포함했습니다). 또한 내 사용자 정의 디렉터리 앞에 .bash_profile.rvm 스크립트( )를 추가했습니다 . ~/.rvm/scripts/rvm이러한 RVM 디렉터리가 맨 앞에 와야 합니다.

깨끗한 bash 세션에 있는 한 모든 것이 정상입니다.

그러나 를 실행하면 tmux구성 파일의 디렉터리 항목이 PATH 앞에 이중으로 추가됩니다(ENV 변수 보호와 관계없이). tmux에는 두 개의 ENV 변수 환경이 있고 이를 병합하는 것 같습니다.

.rvm 스크립트 앞에 추가된 항목은 한 번만 앞에 추가되고 tmux 시나리오에서는 먼저 끝나지 않기 때문에 문제가 됩니다.

이런 일이 발생하지 않도록 하려면 어떻게 해야 합니까?

편집 - 추가 정보: 모든 PATH 추가 항목은 앞에 있으며 ( ) .profile로 묶습니다 . 내 모든 GUI 터미널은 "로그인 쉘"로 실행됩니다..bash_profile. ~/.profile

각 구성 파일에서 이중 포함을 방지하기 위해 다음 형식의 가드를 사용합니다.

    if [ "$PROFILE_SOURCED" != "true" ]; then
         export PROFILE_SOURCED=true
    ...
    fi

PATH에 항목을 추가한다는 것은 export PATH=entry:$PATH.

답변1

해결 방법:

  1. 내 PATH 조작 코드 주위에 가드를 배치했습니다..profile

    if [ "$PATHS" != "true" ]; then
        export PATHS="true"
    #Manipulate and export PATH over here
    fi
    
  2. .bash_profile주변 파일 수준 보호가 제거되었습니다..bashrc

  3. 중요한: 재시작서버 tmux. ( killall tmux) - 매뉴얼에는 서버가 상위 쉘에서 상속된 자체 환경을 유지 관리한다고 나와 있습니다. 구성 파일이 변경되면 tmux재부팅이 필요합니다.

답변2

환경 변수에 대한 중복 항목을 얻을 수 있는 한 가지 가능성은 해당 항목을 재귀적으로 정의하는 것입니다. ~/.bashrc재귀 정의는 다음과 같은 경우에 발생합니다.

export SOME_VARIABLE=$SOME_VARIABLE:/some/paths/

시작 시 tmux기본적으로 로그인 쉘이 시작됩니다. ~/.tmux.conf옵션을 설정하여 이 동작을 변경할 수 있습니다.

set-option -g default-command bash #or zsh, or whatever

에 명시된 바와 같이이 문제. 어느 쪽이든 tmux쉘이 시작되고 소스가 제공됩니다 ~/.bashrc(비로그인 쉘 또는 를 통한 로그인 쉘 ~/.profile). 환경 변수는 파일에서 반복적으로 정의되므로 .bashrc다시 순회하면 정의된 경로에 ~/.bashrc추가됩니다 . /some/paths그래서 그들은 복사될 것입니다.

쉘이 시작되면 많은 환경 변수가 비어 있습니다. 그러므로 그것들을 다음과 같이 정의하십시오.

export SOME_VARIABLE=:/some/paths/

해를 끼치지 않아야 하며 tmux중복이 생성되는 것을 방지합니다. 특정 값(예 PATH: )으로 시작하는 경우 변수 정의에 이러한 기본값을 쓰는 것이 한 가지 해결책이 될 수 있습니다.

관련 정보