修改 tmux run-shell PATH

修改 tmux run-shell PATH

我正在创建一些保存在的脚本$HOME/.local/bin;添加到PATHin 的路径$HOME/.zshrc。如果我通过终端执行它们,一切都很好。然而,当我这样做时,tmux run-shell <script>它失败了。

如果我这样做echo $SHELL并且tmux run-shell "echo $SHELL"两者都返回/bin/zsh。如果我这样做了echo $PATHtmux run-shell 'echo $PATH'事情就不同了;后者比前者短得多。

如何添加路径PATH以便 tmuxrun-shell能够找到它们?我在某处读到它只加载“全局环境”,但到目前为止我还无法向这样的环境添加更多内容。我尝试拥有.zshenv.zprofilezlogin除了.zshrc

如果值得的话,我正在运行 MacOs Ventura,但也会在 Linux 上复制此设置。

非常欢迎任何形式的帮助!

答案1

tmux 内部使用的 shellrun-shell从 tmux 服务器获取环境变量。根据您启动 tmux 服务器的方式以及随后发生的情况,生成的环境可能与您在 tmux 内部或 tmux 外部的交互式 Zsh 中看到的内容一致,也可能不一致。

当客户端连接时,服务器的环境不会自动更新。请参见tmux 如何产生多个会话?注意 tmux 通过合并为子进程创建环境全局环境和会话环境。这个答案假设您想要在全局环境中设置权限PATH,并且您没有PATH在任何会话环境中设置。

我认为如果你从 Zsh 中启动一个 tmux 服务器PATH,那么 tmux 服务器就会接受这个PATH;除非例如set-environment -g PATH /wrong/path:…你的.tmux.conf.

如果您从其他地方(例如从 cron 或作为服务)启动 tmux 服务器,请确保PATH此处是您想要的。

set-environment -g PATH /right/path:…或者在您的 中使用.tmux.conf,因此每个新的 tmux 服务器都会自行设置变量,无论它从其父级继承什么。

对于已经运行的服务器,您可以PATH通过从知道正确的 shell 调用以下命令来在全局环境中进行更新PATH

tmux set-environment -g PATH "$PATH"

相关内容