だいぶ前に社内ブログで次のような方法で tmux
でペイン分割して複数コマンドを同時に実行する方法を紹介していたのですが、
tmux new-session -d ping 1.1.1.1 &&\ tmux split-window ping 8.8.8.8 &&\ tmux split-window ping 8.8.4.4 &&\ tmux set-window-option synchronize-panes &&\ tmux select-layout even-vertical &&\ tmux attach
がしかし tmux
のコマンドを覚えなくてももっと簡単にできるラッパーがあります。
xpanes
xargs
っぽい感覚で tmux
でペイン分割できるラッパーです。機能はいろいろ豊富ですが次のようにすれば↑でやろうとしていたこととだいたい同じことができます。
xpanes -ss -e 'ping 1.1.1.1' 'ping 8.8.8.8' 'ping 8.8.4.4'
これは便利!
しかもこのコマンド epel からサクッとインストールできます。
sudo dnf -y install epel-release sudo dnf -y install xpanes
これは楽ちん!
がしかしコマンドが開始されるまでが異様に遅いです。tmux
を直接叩けばもっとサクッと動くのですが・・・
tmux-cmds
xpanes
だとコマンドが開始されるまで異様に遅かったので、もっと簡単なラッパーを作ってみたのがこれ。
tmux-cmds ping 1.1.1.1 :: ping 8.8.8.8 :: ping 8.8.4.4
これは便利!!
ただのシェルスクリプトなのでパスを通したところにダウンロードすれば OK です。
curl -L https://raw.githubusercontent.com/ngyuki/dotfiles/master/bin/tmux-cmds -o "$HOME/bin/tmux-cmds" chmod +x "$HOME/bin/tmux-cmds"
これは・・・yum とか dnf で入れられるのと比べると楽ちんではないですね。
tmux multiple commands
tmux-cmds
を作るために tmux
の man を見ていたら、tmux
の複数コマンドを一撃で指定できることを知りました。
なので、最初の tmux
を直接使う版は次のように変更できます。
tmux new-session ping 1.1.1.1 \;\ split-window ping 8.8.8.8 \;\ split-window ping 8.8.4.4 \;\ set-window-option synchronize-panes \;\ select-layout even-vertical
tmux
のコマンドには短いエイリアスがあるのと、コマンドやオプションは前方一致で候補が一つなら自動的にそれが指定されたことになるので、次のようにも書けます。
tmux new ping 1.1.1.1 \; split ping 8.8.8.8 \; split ping 8.8.4.4 \; set sync \; selectl even-v
これは便利!!! ラッパーとか使わなくてもこれで十分では感があります(この投稿のモチベーション)。
もう少し削れますが、これはむしろわかりにくいですね。
tmux new ping 1.1.1.1 \; sp ping 8.8.8.8 \; sp ping 8.8.4.4 \; set sy \; selectl even-v