最初のセッションと後続のセッションのグローバルコンテキストとセッションコンテキストは何ですか?

最初のセッションと後続のセッションのグローバルコンテキストとセッションコンテキストは何ですか?

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 は環境をグローバル環境にさらにコピーし、セッションごとにセッション環境があります。ウィンドウが作成されると、セッション環境とグローバル環境がマージされます。両方に変数が存在する場合セッションコンテキストの値の使用

初めて実行すると、123tmuxTESTサーバーはGLOBALに設定されます。しかし、実行すると555セッションTEST=123環境に置き換える必要がありますが、そうではありません。

答え1

ドキュメントを読んで理解したところ、これは予想される動作です。

最初のセッションを作成するときにサーバーを(自動的に)起動すると、グローバル実際に環境が作成され、TEST変数が取得されます。

2回目のセッションを作成するとき、なぜこれを考えるのですか?会議環境がそれを得るでしょう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

関連情報