내 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
해결 방법:
내 PATH 조작 코드 주위에 가드를 배치했습니다.
.profile
if [ "$PATHS" != "true" ]; then export PATHS="true" #Manipulate and export PATH over here fi
.bash_profile
주변 파일 수준 보호가 제거되었습니다..bashrc
중요한: 재시작서버
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
: )으로 시작하는 경우 변수 정의에 이러한 기본값을 쓰는 것이 한 가지 해결책이 될 수 있습니다.