이 주제에 대한 여러 질문을 읽은 후에도 여전히 길을 잃은 느낌이 듭니다. 환경 변수는 특별히 또는 에서 설정하지 $PATH
않고 포함에서 설정해야 한다는 제안을 읽었고 , 그래서 그렇게 했습니다..profile
.bashrc
.zshrc
내 기본 쉘 은 zsh
이고 .set-option -g default-shell $SHELL
tmux.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"