Byobu-重新连接时修改/传递现有会话中的环境变量

Byobu-重新连接时修改/传递现有会话中的环境变量

我最近在尝试使用 waypipe。我正在创建这样的远程窗口:

waypipe -c lz4=9 ssh user@host foot

创建新的脚窗管道取决于环境变量 $WAYLAND_DISPLAY。每个新管道都会创建自己的变量:

$ env | grep WAYLAND_DISPLAY
WAYLAND_DISPLAY=wayland-BoN0JMLL

现在...第一次启动 byobu 时我可以像这样传递这个变量:

$(env | grep WAYLAND_DISPLAY) byobu

但我无法想象如何才能为现有的 byobu 会话更改它,或者至少让 byobu 从您当前所在的终端会话继承此变量。有什么办法可以实现这一点吗?

setenv -g 不能正常工作。

setenv -g 有点用,但仅适用于新窗口/会话

答案1

现在...第一次启动 byobu 时我可以像这样传递这个变量:

你不需要这样做。这个$(env) byobu技巧所做的就是将变量从环境复制到...环境中。当你运行命令时,默认情况下已经发生了这种情况——事实上就是这样‘env’ 本身首先接收变量。

setenv -g 有点用,但仅适用于新窗口/会话

不幸的是,这就是环境变量的本质。每个进程都有一个复制其父级的环境变量,并且该副本不能从外部更改。尽管 byobu (tmux) 本身知道新的环境变量,并且可以将它们提供给刚刚开始在新窗口中打开 shell,它对已经运行的进程实际上无能为力:它们拥有它们所拥有的环境。

因此,除了使用之外setenv,您还需要调整您的 shell 以明确tmux showenv每个命令前的变量或者制作包装脚本(或别名、函数),以便它们在您运行常用的 GUI 应用程序时提取变量。

(例如,前者可能可以通过 zsh 的 precmd 或类似命令实现。)

相关内容