我正在创建一些保存在的脚本$HOME/.local/bin
;添加到PATH
in 的路径$HOME/.zshrc
。如果我通过终端执行它们,一切都很好。然而,当我这样做时,tmux run-shell <script>
它失败了。
如果我这样做echo $SHELL
并且tmux run-shell "echo $SHELL"
两者都返回/bin/zsh
。如果我这样做了echo $PATH
,tmux run-shell 'echo $PATH'
事情就不同了;后者比前者短得多。
如何添加路径PATH
以便 tmuxrun-shell
能够找到它们?我在某处读到它只加载“全局环境”,但到目前为止我还无法向这样的环境添加更多内容。我尝试拥有.zshenv
、.zprofile
和zlogin
除了.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"