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
tmux TEST
서버가 GLOBAL로 설정됩니다. 그런데 를 실행하면 555
세션 TEST=123
환경으로 대체되어야 하는데 그렇지가 않네요...
답변1
설명서를 읽고 이해한 바에 따르면 이는 예상되는 동작입니다.
첫 번째 세션을 생성할 때 서버를 (자동으로) 시작하면,글로벌실제로 환경이 생성되고 TEST
변수가 얻어집니다.
두 번째 세션을 만들 때 왜 이렇게 생각하시나요?회의환경이 그것을 얻을 것이다 TEST
.
세션 환경을 설정하려면 를 사용할 수 있습니다 set-environment
.
#!/bin/bash
tmux new-session -d -s $1
tmux set-environment -t $1 TEST $1
달리다
./test.sh 123
./test.sh 555
그런 다음 다음을 사용하여 환경을 볼 수 있습니다.show-environment
tmux show-environment -t 123 TEST
tmux show-environment -t 555 TEST
편집하다
Window 0은 에서 생성되므로 new-session
환경 설정에 사용되지 않습니다 set-environment
.
나는 이것이 이상하다는 데 동의합니다.
나는 당신이 원하는 것이 .bashrc와 같은 것으로 달성될 수 있다고 생각합니다.
if [ -n "$TMUX" -a -n "$ENVFILE" ]; then
source $ENVFILE
fi
그리고 newsess.sh:
#!/bin/bash
sname=`basename $1`
tmux new-session -d -s $sname "ENVFILE=$1 bash"
tmux set-environment -t $sname ENVFILE $1
/tmp/환경:
export A=1
export B=2
/tmp/env2:
export A=5
export B=5
그 다음에
./newsess.sh /tmp/env
./newsess.sh /tmp/env2
각 세션 창에서 A=1 및 B=2를 얻습니다.환경그리고 각 세션 창에서 A=5 및 B=5환경 2.