tmux가 PATH 변수를 "정렬"합니까?


14

재현 가능한 문제가 있습니다.

  1. Bash .profile에서 PATH 설정
  2. 에 의해 TMUX 시작 tmux, tmux attach또는 변형
  3. $ PATH를 반향하여 동일한 구성 요소를 사용하지만 다른 순서로 표시

이것을 막는 방법? 무엇을 설명합니까?

답변:


29

Mac을 사용 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin중이고 tmux를 실행할 때 왜 PATH 앞에 계속 추가 되는지 궁금 하다면, /etc/profile파일 에서 실행되는 path_helper 유틸리티 때문입니다 .

tmux를 소스로하지 말라고 쉽게 설득 할 수는 없지만 ( /etc/profile어떤 이유로 tmux는 항상 로그인 쉘로 실행되므로 / etc / profile을 읽습니다) path_helper의 효과가 don 당신의 경로를 망쳐 놓지 마십시오.

요령은 path_helper가 실행되기 전에 PATH가 비어 있는지 확인하는 것입니다. 내 ~/.bash_profile파일에는 다음이 있습니다.

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

path_helper가 실행되기 전에 PATH를 지우면 기본 PATH가 (이전) 선택한 PATH 앞에 추가되는 것을 막을 수 있으며 나머지 개인 bash 설정 스크립트 (추가 명령 .bash_profile또는 .bashrc소스에서 제공 한 경우 .bash_profile)를 통해 그에 따라 PATH.

이해가 되길 바랍니다 ...


1
이것은 나를 위해 그것을 완전히했다! 나는 if [ -n "$TMUX" ]절 뒤에 숨겨져 있지만 궁금해했다 [ -f /etc/profile ]. /etc/profile항상 일반 파일 이라고 가정하는 것이 안전하지 않습니까?
Ryan Lue

1
당신은 편안하게 대체 할 수 @RyanLue -f와 함께 -e,하지만 로그인 할 때 내가 거기이었다 확인 원하지 않는 한, 나는 개인적으로 실행됩니다 스크립트에서 파일을 시도하고 소스하지 않을 것입니다. 그래도 많은 다른 컴퓨터 (및 운영 체제)에서 bash 스크립트를 재사용하는 경향이 있으므로 방탄인지 확인하고 싶습니다. 다른 유닉스 변형이 그것을 다른 것으로 부를 수 있다고 상상할 수 있습니다.
Graham Ashton

감사합니다! 이것은 나를 미치게 ~/.bash_profile만들었고 , 그 작은 스 니펫을 맨 위에 놓아서 행복한 TMux 세상으로 돌아 왔습니다.
hoosierEE

이 시스템 기본값으로 혼란을 원하지 않는 경우 set -g default-command "${SHELL}".tmux.conf힘 비 로그인 쉘을 사용하는 TMUX. 이미 로그인 한 후 일반적으로 tmux를 열기 때문에 어쨌든 그 점을 알 수 없습니다.
seeker_of_bacon

5

아니; $PATH많은 시스템이 사용자가 설정 한 순서에 의존하기 때문에 정렬 은 너무 미친 짓입니다.

그러나 tmux "로그인"모드로 쉘을 시작하여 다시~/.profile 소스를 제공 합니다 . 즉 PATH=/my/dir:/another/dir:$PATH, 해당 파일 과 같은 것이 있으면 다시 수행 되어 $ PATH에을 포함 /my/dir:/another/dir:/my/dir:/another/dir:(etc.)합니다. 이를 피하기 위해 다른 변수를 사용하여 확인할 수 있습니다.

if [ "$_SKIP_PROFILE" ]; then
    return 0
else
    export _SKIP_PROFILE=y
fi

export PATH="/my/dir:/another/dir:$PATH"

0

@Graham Ashton 아이디어 주셔서 감사합니다

내 제안은 당신이 넣어

if [ -f /etc/profile ]; then
    PATH=""
    source /etc/profile
fi

상단의 .zshrc 파일에서.

당신의 것을 확인하십시오

export NVM_DIR="$HOME/.nvm"
. "/usr/local/opt/nvm/nvm.sh"

아래에 있습니다.

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