새로운 tmux 세션은 .zshrc 소스만 제공하며 .profile에 정의된 $PATH를 가져오지 않습니다.

새로운 tmux 세션은 .zshrc 소스만 제공하며 .profile에 정의된 $PATH를 가져오지 않습니다.

이 주제에 대한 여러 질문을 읽은 후에도 여전히 길을 잃은 느낌이 듭니다. 환경 변수는 특별히 또는 에서 설정하지 $PATH않고 포함에서 설정해야 한다는 제안을 읽었고 , 그래서 그렇게 했습니다..profile.bashrc.zshrc

내 기본 쉘 은 zsh이고 .set-option -g default-shell $SHELLtmux.conf

그러나 이제 tmux 세션을 시작할 때마다 어떤 수정도 허용되지 않고 $PATH소스만 허용됩니다 .zshrc. 현재 해결 방법은 source ~/.profile끝에 추가하는 것인데 .zshrc, 이는 잘못된 것 같습니다.

이 게시물tmux/screen은 일반적으로 로그인 셸이 아닌 하위 셸로 실행되므로 반드시 source일 필요는 없음을 나타냅니다 .profile. 그러나 또 다른 기사에서는 logout쉘에서 실행할 수 있다면 그것은 로그인 쉘이라고 주장하는데, 저는 그렇게 할 수 있었습니다. 많은 게시물에서는 tmux검색해야 한다고 주장합니다..bash_profile 추가하다 .profile, 그러나 무시됩니다 .bashrc. 이는 분명히 내 zsh에서 발생하는 일이 아닙니다.

결국 zsh와 함께 tmux를 사용하고 환경 변수를 올바르게 가져오는 모범 사례는 무엇입니까?

답변1

설명하는 동작은 예상되는 동작입니다. 환경 변수는 .profile로그인할 때 정의 되고 읽혀집니다. 새로운 tmux 세션을 시작하면 로그인되지 않습니다. Tmux는 기본적으로 로그인 셸을 시작하지만 구성에서 이를 해제했으므로 tmux 창은 외부 세계만 상속합니다.

이것을 입력하면 source .profile.zshrc이 실행 중인 모든 환경이 무시됩니다. 즉, 다른 PATH.

source .profile에서 삭제하면 됩니다 .zshrc. 모든 쉘에서 로그인 시 기본 환경이 설정됩니다.

로그인 쉘이 zsh 인 경우 .zprofile로그인 시 .profile. sh에서 작동하는 GUI 로그인을 원하고 텍스트 모드 로그인에 동일한 파일을 사용하고 zsh를 로그인 셸로 설정한 경우 다음 줄을 다음 줄로 사용하세요 ..profile.bash_profile.profile.profile~/.zprofile

emulate sh -c 'source ~/.profile'

tmux가 로그인 셸을 실행하도록 구성된 경우 모든 tmux 창은 주변 환경을 상속하지 않고 덮어씁니다. 즉, tmux 외부에서 새 변수를 정의하면 해당 변수는 여전히 tmux 세션에 남아 있지만 이미 정의된 변수의 값을 변경하면 변경 사항이 tmux 내에서 손실됩니다. 전체적으로 tmux의 기본 동작은 별로 의미가 없습니다. 이것을 피하는 것이 set-option -g default-command $SHELL이 라인의 요점 입니다 ~/.tmux.conf.

tmux를 "새 로그인" 방법으로 사용하는 경우 각 창을 새로운 환경에서 실행하는 것이 더 좋을 수 있습니다. 그렇다면 다음과 같은 방법을 사용하여 환경을 정리해야 할 것입니다.

set-option -g default-command env -i USER="$USER" LOGNAME="$LOGNAME" $SHELL

.zprofile로그인 셸이 zsh인 경우 대신 표시됩니다 .profile.

답변2

set-option -g default-shell $SHELL에서 제거해야 합니다 . envvar가 .tmux.conf기본적으로 tmux사용되므로 필요하지 않습니다.SHELL

맨페이지에는 다음과 같이 나와 있습니다.

     default-shell path
             Specify the default shell.  This is used as the login
             shell for new windows when the default-command option is
             set to empty, and must be the full path of the exe-
             cutable.  When started tmux tries to set a default value
             from the first suitable of the SHELL environment vari-
             able, the shell returned by getpwuid(3), or /bin/sh.
             This option should be configured when tmux is used as a
             login shell.

tmux~/.profile로그인 셸은 기본적으로 시작됩니다(즉, 가져오거나 ~/.zprofile- 및/ ~/.zlogout또는 ~/.bash_logout종료하기 전의 셸).

     default-command shell-command
             Set the command used for new windows (if not specified
             when the window is created) to shell-command, which may
             be any sh(1) command.  The default is an empty string,
             which instructs tmux to create a login shell using the
             value of the default-shell option.

바라보다여기이 동작에 대한 논의 - 이는 매우 놀랍고 의 동작과 다릅니다 screen.

tmux그러니 시작 하고 싶다면아니요-기본 쉘 로그인 쉘을 사용하여 다음을 입력하십시오 ~/.tmux.conf.

set -g default-command $SHELL

로그인 쉘을 실행하기 위해 기본 쉘이 아닌 다른 쉘을 사용하려면 다음을 수행하십시오.

set -g default-command "/alternative/sh -l"

관련 정보