첫 번째 세션과 후속 세션에 대한 전역 및 세션 컨텍스트는 무엇입니까?

첫 번째 세션과 후속 세션에 대한 전역 및 세션 컨텍스트는 무엇입니까?

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 555TEST=123대신 보여주세요 TEST=555! ! !

다음 TMUX 세션이 처음 생성된 세션의 모든 환경 변수를 상속하는 이유는 무엇입니까?

정말 놀랍습니다. 이런 무의미한 행동을 어떻게 멈출 수 있을까요?

https://manpages.debian.org/experimental/tmux/tmux.1.en.html#GLOBAL_AND_SESSION_ENVIRONMENT

서버가 시작되면 tmux는 환경을 전역 환경에 추가로 복사하며 각 세션마다 세션 환경이 있습니다. 창이 생성되면 세션 환경과 전역 환경이 병합됩니다. 둘 다에 대해 변수가 존재하는 경우세션 컨텍스트의 값 사용.

처음 실행하면 123tmux 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.

관련 정보