我有一个 bash 脚本:
#!/bin/bash
export TEST=$1
tmux new-session -d -s $1
tmux send-keys -t $1:0 "printenv | grep TEST" C-m
跑:
# ./test.sh 123 #The tmux server is automatically launched
# ./test.sh 555
结果:
tmux a -t 123
节目TEST=123
tmux a -t 555
显示TEST=123
而不是TEST=555
!!!!
为什么我的下一个 TMUX 会话会继承第一个创建的会话的所有环境变量?
这很令人惊讶,我该怎么做才能阻止这种无意义的行为?
https://manpages.debian.org/experimental/tmux/tmux.1.en.html#GLOBAL_AND_SESSION_ENVIRONMENT
当服务器启动时,tmux 将环境复制到全局环境中;此外,每个会话都有一个会话环境。创建窗口时,会话和全局环境将合并。如果两者都存在变量,则使用会话环境中的值。
当我第一次运行时123
,TEST
为 tmux 服务器设置了 GLOBAL。但是当我运行时555
,TEST=123
应该被会话环境替换,但它不是......
据我了解阅读手册,这是预期的行为。
当您在创建第一个会话时(自动)启动服务器时,确实会创建全局
TEST
环境并获取变量。为什么你认为当你创建第二个会话时,会话环境会得到
TEST
.要设置会话环境,您可以使用
set-environment
.运行
然后你可以使用
show-environment
编辑
窗口 0 在创建,
new-session
因此没有使用set-environment
.我同意这很奇怪。
我认为你想要的可以通过(类似的).bashrc 来实现:
和 newsess.sh:
/tmp/环境:
/tmp/env2:
然后
您在 session env的每个窗口中获得 A=1 和 B=2 ,在session env2的每个窗口中获得 A=5 和 B=5 。