tmux是一款很好使用的终端工具,配合shell脚本使用非常方便。
终端输入命令:
sudo apt-get install tmux
首先需要对tmux使用的名词有一个基本了解:
session :会话
window : 窗口
pane:窗格
可以这样通俗的理解:当前界面的整个终端就是一个session(会话),一个session里面包含了很多个window(窗口),一个window可以被分成很多pane(窗格),关系可以表示如下:
session > window > pane
同时tmux还可以配合shell脚本一起使用,因此会在解算不同操作的终端命令、shell脚本命令以及快捷键等;
值得注意的是在使用tmux快捷键方式时,都需要使用前缀按键ctrl+b
来唤醒,所以在使用快捷键需要先按ctrl+b
,在按相应快捷键。
创建一个新的session,在终端输入tmux
,随后会创建一个默认名为0
的且有一个windows的session
tmux
通常在使用tmux的时候都需要指定操作的具体session、window和pane,因此为了方便使用需要对不同session、window、pane进行命名操作。
tmux new -s
# 创建名称为test的session
tmux new -s test
有时候需要离开当前session进行其他操作,但是想要保留当前终端的程序继续运行,这时候就需要退出当前session
# 终端命令
tmux detach
# 快捷键
(ctrl + b )+ d
当我们打开好几个session时需要查看和操作不同session
ps:使用查看session的快捷键时需要在tmux的窗格中操作,同时可以选择操作不同session,退出按Esc
# 终端命令
tmux ls
# 快捷键
(ctrl+b) +s
进入指定名称session
ps:这里的进入session操作指的是在tmux之外终端选择session,在pane中输入终端命令无效,但是可以通过查看session的快捷方式选择进行指定名称session
# 终端命令
tmux attach -t
## 进入名为test的session
tmux attach -t test
tmux a -t test
在tmux终端中快速切换到其他session
ps:这里的选择session操作是在tmux终端下进行操作
# 终端命令
tmux switch -t
## 选择并进入名为test2的session
tmux switch -t test2
当你需要关闭部分session时,可以使用如下命令:
ps:在使用终端命令时当前session会被关闭,也就是说使用tmux ls
命令查看session时,此时关闭的session已经不存在了;但是在tmux终端中使用快捷键时会回到你的电脑的终端,使用tmux ls
查看session时,关闭的session还在,可以简单理解为快捷键是让当前session在后台挂机,不影响在当前session运行的程序
# 终端命令
tmux kill-session -t
## 关闭名为test的session
tmux kill-session -t test
# 快捷键
(ctrl + b) + d
对session进行重命令
ps:快捷键方式
# 终端命令
tmux rename-session -t
## 将名为 test 的session重命名为 test3
tmux rename-session -t test test3
# 快捷键
(ctrl+b) + $
有时候一个窗口不够用就需要重新窗口
# 终端命令
tmux new-window -n
## 新建一个名为new_window的窗口
tmux new-window -n new_window
# 快捷键
(ctrl+b)+c
当一个session有很多window时需要进行窗口的切换
# 终端命令
tmux select-window -t
## 切换到名为test的window下
tmux select-window -t test
# 快捷键
## 切换到下一个窗口: (ctrl+b) + n
## 切换到上一个窗口: (ctrl+b) + p
## 切换窗口列表并选择: (ctrl+b) + w
## 切换到指定窗口: (ctrl+b) + num 这里的num是每个窗口前的编号
有时候需要对窗口进行重命名
# 终端命令
tmux rename-window
## 将test窗口重命名为 rename_window
tmux rename-window test rename_window
# 快捷键
(ctrl+b) + ,
# 终端命令
tmux kill-window -t
## :可以是窗口名称,或者是窗口前面的数字
## 快捷键
(ctrl+b) + &
## 关闭当前窗口
在tmux中,窗格的使用是最频繁的。每个窗格可以干不同的事,不同的窗格之间是相互独立的。
# 水平切割成上下两部分
## 终端命令
tmux split-window
## 快捷键
(ctrl+b) + "
## 垂直切割成左右两部分
## 终端命令
tmux split-window -h
## 快捷键
(ctrl+b) + %
光标移动到上/下/左/右
## 终端命令
tmux select-pane -U/-D/-L/-R
## 快捷键
(ctrl+b) + 上/下/左/右键
# 快捷键
(ctrl+b) + x
# 快捷键
(ctrl+b) + z
点击回车取消
# 终端命令
(ctrl+b) + t
以上就是tmux常用功能和命令
在写shell脚本时搭配tmux的命令可以“多线程”的操作不同窗口进行不同任务的处理,非常方便和高效,接下来将通一个简单的shell脚本对tmux进行一个介绍
## Set Tmux session and window name
session_name="tmux_session"
window_node="tmux_window"
## Kill tmux session of same name if existed
# kill同名session的tumx任务
tmux kill-session -t ${session_name}
# 创建一个名为“tmux_session"的任务,其中窗口名为”tmux_window"
tmux new -d -s ${session_name} -n ${window_node}
# Establish and split a new session in the background
# 左右切割窗口并命名为0/1
tmux split-window -h -t ${session_name}:${window_node}
tmux split-window -v -t ${session_name}:${window_node}.0
tmux split-window -v -t ${session_name}:${window_node}.1
# 系统待机2s
sleep 2
# 在当前窗口输入命令"pwd" 并进入到/home/data/emmc路径下运行test.py文件
tmux send -t ${session_name}:${window_node} "pwd && \
cd /home/data/emmc && \
python test.py" ENTER
# 在0号窗口输入命令"rostopic list"并启动launch文件
tumx send -t ${session_name}:${window_node} "rostopic list && \
roslaunch analysis_imu imu.node" ENTER
## Attach the session to front
tmux a -t ${session_name}
[1] 一文助你打通 tmux
[2] 终端工具tmux使用教程 — 脚本启动程序