tmuxの中にいるときも、そうでないときもcssh的なことがしたい
※ 最近は↓がおすすめ
xpanes 'ssh {}' host{1..5}
な感じで動く
困ったこと
こちらの記事にあるような、複数ホストに同時にSSHして、synchronize-panes on
で同時操作をしたい。
が、tmuxの中で作業しているときにこのスクリプトだと動かない。
いちいち、iTermで新規windowを起動しないといけない。
書いてみた
zsh力(シェルスクリプト力)が不足しているため、if文でつらつら書く感じになりました。
が、いちおう動きました。
↓を.zshrcに追加。
sshx() { local SSH=${SSHX_COMMAND:-ssh} local SESSION=${SESSION_NAME:-"${SSH}x-$(date +%s)"} if [ -n "$TMUX" ]; then tmux new-window tmux send-keys "$SSH $1" C-m shift for h in $*; do tmux split-window "$SSH $h" tmux select-layout tiled done tmux set-window-option synchronize-panes on tmux select-pane -t 0 else tmux new-session -d -s $SESSION "$SSH $1" shift for h in $*; do tmux split-window -d -t $SESSION "$SSH $h" tmux select-layout -t $SESSION tiled done tmux set-option -t $SESSION synchronize-panes on tmux attach-session -t $SESSION fi }
使い方
sshx xxx.xxx.xxx.100 xxx.xxx.xxx.101
みたいな感じで、tmuxの中で作業しているときも、新規ウィンドウでもどちらでも動きます。
補足
mosh
を使うこともあるので、SSHX_COMMANDという変数がある場合はそちらでSSHするみたいなことをしているtmux send-keys "$SSH $1" C-m
とtmux split-window "$SSH $h"
が混在していたり、とにかく力技でひどい- ググった感じ自分以外、困っている人はいないような・・・