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
tmuxTEST
サーバーは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。