这样做的天真方法行不通。尝试这个:
启动第一个 tmux session 。
$ export ENVIRONMENT="production"
$ tmux
然后您可以在 session 内验证
ENVIRONMENT
是 production
然后,在第二个终端中启动另一个 session
$ export ENVIRONMENT="staging"
$ tmux
出人意料的是这届
ENVIRONMENT
也是production
!这是非常不直观的!这里发生了什么?
我怎样才能做到这一点?我喜欢 session 中的所有窗口“继承”环境变量。
最佳答案
“最简单”的解决方案是创建一个新的 tmux
不同环境的服务器。
$ ENVIRONMENT=production tmux -L prod-tmux
和
$ ENVIRONMENT=staging tmux -L staging-tmux
你总是需要指定哪个套接字,
prod-tmux
或 staging-tmux
, 在您重新连接到现有 session 时使用。下一个解决方案是使用一台服务器,但修改该服务器中每个 session 的环境。就像是
$ tmux new-session -d -s production
$ tmux new-session -d -s staging
$ tmux set-environment -t production ENVIRONMENT production
$ tmux set-environment -t staging ENVIRONMENT staging
请注意
ENVIRONMENT
不会在每个 session 的初始窗口中运行的进程中设置,但将为创建的任何后续窗口设置。 (除非服务器在第一次启动时继承了 ENVIRONMENT
。)当您运行时
tmux
,它首先查找现有服务器(默认服务器,或由 -L
或 -S
选项指定的服务器)。如果没有服务器,则启动一个,服务器的环境继承自当前环境。如果有服务器,
tmux
简单地请求服务器执行 tmux 命令(默认情况下, new-session
,或由 tmux
的参数指定的任何命令)命令,然后退出。 tmux
的环境命令本身并不相关,除非所请求的命令被记录为从中读取(参见 set-environment
)。服务器管理一组窗口,每个窗口代表一个由服务器创建的进程(不是
tmux
命令本身)。 session 只是一组逻辑窗口,也由服务器管理。
关于tmux - 如何在不同环境下启动两个 tmux session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50506708/