ssh先などでtmuxを使ってる場合、毎回アタッチしたり、デタッチした後にexitを打ったりするのはだるいですよね。
なので、これらを自動的に行う設定を書いてみました。
if [[ -n "${REMOTEHOST}${SSH_CONNECTION}" && -z "$TMUX" && -z "$STY" ]]; then
function confirm {
MSG=$1
while :
do
echo -n "${MSG} [Y/n]: "
read ans
if [ -z "$ans" ]; then
ans="y"
fi
case $ans in
[yY]) return 0 ;;
[nN]) return 1 ;;
esac
done
}
option=""
if tmux has-session && tmux list-sessions; then
echo "tmux attached session "
option="attach"
else
echo "tmux created new session"
fi
tmux $option && confirm "exit?" && exit
fi
上記のコードを.zshrc
などに書いておくと、sshで繋いだ時に自動的にtmuxが起動します。
また、デタッチしたとき以下のような表示が出て、y
を入力するとexitが実行されます。
exit? [Y/n]:
デフォルトでy
が入力されるようになっているので、デタッチ後にエンターを押せばsshも切れるという感じです。
tmuxの外で作業したい場合や、tmuxがうまく動かなくなることも想定して、confirm
を使ってexitするかどうかを決めれるようにしています。