我的工作环境是,我有多个项目,每个项目中都有许多脚本,这些脚本将环境变量设置为特定于该项目的值。
我想要做的是为每个项目使用单独的tmux会话,并设置变量,以便为会话中的所有窗口设置变量。
我尝试使用设置环境选项,该选项使用-g选项,但随后为连接到该服务器的所有会话设置了该变量。
如果没有-g选项,我可以在使用show-environment时看到它的设置,但不能访问shell中的变量。
有没有人想出解决这个问题的方法?
使用tmux 1.8和tcsh
发布于 2018-03-20 23:37:58
我想出了一个方法来做到这一点。我使用的是tmux 2.5。
背景
在tmux手册页中,它指出有两组环境变量:全局和每个会话。当您创建一个新的tmux会话时,它会将这两个组合并在一起,这将成为会话中可用的环境变量集。如果将环境变量添加到全局组中,则它们似乎在所有打开的会话之间共享。您希望将它们添加到每会话组中。
执行此操作
步骤1:创建tmux会话。
tmux new-session -s one
步骤2:将环境变量添加到每会话组。
tmux setenv FOO foo-one
这会将环境变量添加到每个会话的环境变量集中。如果键入tmux showenv
,您将在输出中看到它。但是,它不在当前会话的环境中。输入echo $FOO
不会给出任何结果。可能有一种更好的方法,但我发现最简单的方法就是手动导出它:
export FOO='foo-one'
第3步:创建新窗口/窗格
现在,每次在当前会话中创建新窗口或窗格时,tmux都会从每个会话组中获取FOO环境变量。
自动化的
我使用bash脚本自动创建使用这些环境变量的tmux会话。下面是我如何自动化上述操作的一个示例:
#!/bin/bash
BAR='foo-one'
tmux new-session -s one \; \
setenv FOO $BAR \; \
send-keys -t 0 "export FOO="$BAR C-m \; \
split-window -v \; \
send-keys -t 0 'echo $FOO' C-m \; \
send-keys -t 1 'echo $FOO' C-m
发布于 2014-01-16 13:04:43
在会话中,您可以使用以下命令访问每个会话的tmux (本地)环境变量:
bash> tmux show-environment
如果添加-g参数,您将获得所有会话的环境,即全局环境。本地环境与全局环境不同。前面的命令打印整个本地环境,但您也可以只查看一个变量:
bash> tmux show-environment variable_name
variable_name=value
为了获得这个值,你可以使用一些'sed‘魔法或者对单个变量使用'export’,或者你甚至可以‘导出’整个环境到你的shell中。下面是3种方法。
bash> tmux show-environment variable_name | sed "s:^.*=::"
value
bash> eval "export $(tmux show-environment variable_name)"
bash> echo $variable_name
value
bash> for var in $(tmux show-environment | grep -v "^-"); do eval "export $var"; done;
bash> echo $variable_name
value
如果需要,如果您想访问全局环境,只需在show-environment命令后添加-g参数。
发布于 2015-03-31 13:18:46
我做了一个简单的
export MY_VAR="some value"
在我开始tmux会话之前,它使我能够从该会话中的所有窗口访问MY_VAR
。
https://stackoverflow.com/questions/20701757
复制相似问题