tmux で既存のセッションに接続した時に環境変数を更新する
対象
tmux 初学者
内容
tmux で既に開いているセッションは、当然の事ながら外側の環境変数の更新なんて考慮しない。でも、それだとログインしたら毎回変わる変数、例えばソケットのパスとかが反映されない。
以下の手順で session-attached された時に更新するようにしたのでメモしておく。以下は NIRI_SOCKET の値を接続する毎に更新する例。
~/.config/tmux/tmux.conf:
set-option -g update-environment "NIRI_SOCKET"
set-hook -g client-attached 'run-shell "tmux list-panes -a -F \"##{pane_pid}\" | xargs -I {} kill -USR1 {}"'~/.bashrc:
TRAPUSR1() {
if [ -n "$TMUX" ]; then
eval "$(tmux show-environment -s NIRI_SOCKET 2>/dev/null)"
fi
}
trap TRAPUSR1 SIGUSR1tmux の方では、session-attach で接続される度に、USR1 シグナルを該当プロセスに送って、 bash の方でシグナルを受けて eval で現シェルでの変数を更新。