なっく日報

技術やら生活やらのメモ

tmuxの中にいるときも、そうでないときもcssh的なことがしたい

困ったこと

yuuki.hatenablog.com

こちらの記事にあるような、複数ホストに同時に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-mtmux split-window "$SSH $h"が混在していたり、とにかく力技でひどい
  • ググった感じ自分以外、困っている人はいないような・・・