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"が混在していたり、とにかく力技でひどい- ググった感じ自分以外、困っている人はいないような・・・