脚本化 tmux

这是很久前想整理的文档,太久了已经遗忘了,这里就只记录我的脚本吧。一些命令可以直接参考手册。

自动化tmux主要场景是快速启动工作台,有些命令已经记不清了,也一股脑放上来,以后如果有需要再修正好了。

可以查看 man 手册对照:https://man7.org/linux/man-pages/man1/tmux.1.html

比如最常用的和 panes 相关的操作,可以查看 https://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANES

# kelu.sh

#!/bin/bash

name="kelu"
time=$(date +%Y-%m-%d)
cmd1="tail -f ~/Workspace/xxs.log"
cmd2="iftop"
cmd3="docker ps -a | grep -E 'openresty|nginx'"

create_w (){
  client=$1
  tmux_name="$name:$client"
  tmux neww -a -n "$client" -t $name
  tmux send -t $tmux_name "ssh sh4" Enter
  tmux send -t $tmux_name "$cmd1" Enter
  tmux split-window -h -t $tmux_name                         # 纵向
  tmux send -t $tmux_name "ssh sh2" Enter
  tmux send -t $tmux_name "$cmd2" Enter
  tmux send -t $tmux_name "LTttt3BD"
  tmux split-window -v -t $tmux_name                         # 横向
#  tmux send -t $tmux_name "ssh sh1" Enter
  tmux send -t $tmux_name "$cmd2" Enter
  tmux send -t $tmux_name "LTttt3BD"

  tmux select-pane -t 0                                      # 切换第一个
  tmux split-window -v -t $tmux_name                         # 横向
  
  # 开启新的 windows
  tmux neww -a -n "blog" -t $name
  tmux send -t "$name:blog" "cd Workspace/blog" Enter
  tmux send -t "$name:blog" "nvim" Enter
  tmux send -t "$name:blog" ":NvimTreeToggle" Enter
  
  # 选择第一个 pannel
  tmux selectw -t $tmux_name
}

tmux new -s $name -d # 新tmux session
create_w main # 新windows,多个panel
# 实际上可以创建多个windows,在这里我起了一个统一的名叫 kelu 的session, main是第一个windows,例如我创建main2这个windows如下:
# create_w main2

tmux attach -t $name
exit

在命令行中运行

kelu.sh

即可自动运行预设的窗口和命令行。

如果我启动了多个windows,我希望他们能每隔一段时间自动切换,相应脚本如下:

# switch.sh

#!/bin/bash

init=1
num=$1
tm=$2

w=$init
if [ ! $num ]; then
  num=6
fi

if [ ! $tm ]; then
  tm=10
fi

while true; do
  w=$(( $w + 1 ))
  tmux select-window -t $name:$w
  if [ $w -gt $num ]; then
    w=$init
  fi
  sleep $tm;
done

参考资料


懂了美国的科技是怎么发展起来的,就懂了我们接下来该怎么办 - 九边 Golang 简洁架构实战 - luozhiyun