为什么 tmux 在启动 shell 时会忽略 PATH?

为什么 tmux 在启动 shell 时会忽略 PATH?
  • 系统:macOS 10.12
  • Tmux 版本:2.6

作为 macports 用户,我在/opt/local/bin的开头有PATH。但是,启动 时tmux,它使用/bin/bash而不是/opt/local/bin/bash,实际上,SHELL变量也指向那里。这让我很困惑,并且.bashrc由于版本过时而导致某些设置中断。

我知道我可以将路径设置为 tmux 的默认 shell set-option -g default-shell,但我.tmux.conf在不同的系统上使用我的,所以它应该与操作系统无关,只需使用执行时获得的 shell 即可bash

我的所有设置都在und中.bashrc,并且此文件的源码在那里,所以我的应该可以使用。.bash_login.bash_profilePATHtmux

我该如何解决这个问题?

似乎SHELL总是这样/bin/bash,不知道为什么。我的终端配置为/opt/local/bin/bash -l在启动时启动。

答案1

这是什么man 1 tmux在 Linux 中是这样说的default-shell。我期望tmux在 macOS 中的行为类似:

default-shell path

default-command指定默认 shell。当选项设置为空时,这将用作新窗口的登录 shell ,并且必须是可执行文件的完整路径。启动时尝试从环境变量的第一个合适的 shell(由、 或返回的 shell)tmux中设置默认值。当用作登录 shell时,应配置此选项。SHELLgetpwuid(3)/bin/shtmux

如您所见,这些方法均未使用$PATH。此外,bash手动的

SHELL

此环境变量保存了 shell 的完整路径名。如果在 shell 启动时未设置此环境变量,Bash 将为其分配当前用户登录 shell 的完整路径名。

不管怎样,重要的是你的登录 shell,而不是/opt/local/bin/bash。你可以考虑SHELL$BASH你的 中用覆盖.bashrc

SHELL="$BASH"

注意:我还没有测试过它的副作用。它有一个特点(至少在我的 Kubuntu 中)。如果tmux已经为您的用户运行,则更改为SHELL不会影响其他调用。这是因为其他tmux调用与第一个调用一起工作,并且它是处理所有事情的tmux第一个调用(我可以用 看到这一点);当您调用另一个调用时,它的环境不会改变。tmuxpstree

但是,无论等如何,这种调用方式tmux都应该尊重您的要求:$PATH$SHELL

tmux new-session bash

相关内容