我的工作环境是,我有多个项目,并且每个项目中都有许多脚本,这些脚本使用设置为特定于该项目的值的环境变量。
我想做的是为每个项目使用单独的 tmux 会话并设置变量,以便为该会话中的所有窗口设置它们。
我尝试使用 set-environment 选项,该选项使用 -g 选项工作,但随后为连接到该服务器的所有会话设置变量。
如果没有 -g 选项,我在使用 show-environment 时会看到它的设置,但无法访问 shell 中的变量。
有人想出解决这个问题的方法吗?
使用 tmux 1.8 和 tcsh
我想出了一个方法来做到这一点。我正在使用 tmux 2.5。
背景
在 tmux 手册页中,它指出有两组环境变量:全局变量和每会话变量。当您创建新的 tmux 会话时,它将把两个组合并在一起,并成为会话中可用的环境变量集。如果环境变量被添加到全局组中,它们似乎会在所有打开的会话之间共享。您想要将它们添加到每个会话组中。
Do this
第 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)