我想知道是否有任何简单的方法可以更改 bash 环境变量并应用于 tmux 会话中的 Windows?
我用谷歌搜索并没有找到解决方案,所以我在这里发布问题。
谢谢!!
您不能直接更改环境变量。
但是,您可以使 tmux 实例内的 shell 终端获取新变量。这需要几个步骤。
首先,tmux 可以自行更新环境变量。配置指令update-environment
执行此操作。此处列出的任何变量都将自动更新 - 连接到 tmux 会话会使用刚刚连接的客户端的值更新会话的环境变量。因此,如果您运行tmux attach
并进行了SSH_AUTH_SOCK
设置,那么 tmux 会话将获得 的新值SSH_AUTH_SOCK
。
但是,这只会更新会话的变量,因此只有新的窗格/窗口才会获取值。现有窗口仍将具有旧值。正如@IgnacioVazquez-Abrams 所说,这个问题没有直接的解决办法。
但是,您可以在许多程序中修复它。最新版本的 tmux 有一个show-environment
命令,可以在会话中查询环境变量的当前值。这允许您在程序中使用逻辑后获取环境变量update-environment
。
例如,您可以让一些 shell 获取新值。在 ZSH 中,我使用以下precmd
钩子来完成此操作~/.zshrc
:
_update_ssh_agent() {
local var
var=$(tmux show-environment |grep '^SSH_AUTH_SOCK=')
if [ "$?" -eq 0 ]; then
eval "$var"
fi
}
if [[ -n "$TMUX" ]]; then
add-zsh-hook precmd _update_ssh_agent
fi
Run Code Online (Sandbox Code Playgroud)
这使得 tmux 会话内的 shell 每次显示新提示时都会更新 SSH 代理。重新连接后,我所要做的就是在提示符下按 Enter 键,它就会获取新的 SSH 代理连接。
Bash 也有一个预命令机制,尽管我不知道如何立即配置它。您还可以配置更多程序来进行show-environment
自我更新,例如 vim 或 emacs。但是,您需要单独配置您可能想要执行此操作的每个程序。
归档时间: |
|
查看次数: |
5035 次 |
最近记录: |