使用 Tmux 发送变量

使用 Tmux 发送变量

我已经在以下位置分配了一个变量.tmux.conf

setenv -g var "Something"

如何绑定一个键来将此变量发送到我的终端而不需要使用prefix:send $var

我尝试了bind -n M-q send $var Enter哪个是AltQ,但没有成功

答案1

setenv -g var "Something"
bind -n M-q run-shell "tmux send #{var}" # or
bind -n M-q run-shell 'tmux send ${var}'

重要的是要理解 Tmux 的“全局环境”与 Tmux 服务器的“进程环境”不同。从手册页:

GLOBAL_AND_SESSION_ENVIRONMENT

当服务器启动时,tmux 将环境复制到全球环境

老实说,这对我来说有点奇怪。我想我们都希望 Tmux 将全局 ( -g) 变量解析到它自己的进程中,就像.bashrc将 a 获取到 shell 中一样,但它不是这样工作的。

“全局环境”是Tmux适用的环境它创建的所有会话,而不是 Tmux 本身。

我们可以var通过以下方式证明它不是 Tmux 服务器环境的一部分:

$ strings /proc/$(pgrep -xo "tmux: server")/environ
$ strings /proc/$(pgrep -xo "tmux: server")/environ | grep Something

它实际上甚至不是 Tmux 的一部分客户的环境:

$ strings /proc/$(pgrep -xo "tmux: client")/environ | grep Something

然而,它Tmux 传递到新创建的会话的环境的一部分:

$ strings /proc/$$/environ | grep Something
var=Something

因此,为了利用您在 中设置的值.tmux.conf,我们可以用来run-shell启动新的shell,Tmux 将填充全局环境,并tmux send ...在那里运行命令。

相关内容