在 Linux 和类 Unix 系统中,tmux
是一个强大的终端复用器,它允许用户在一个终端窗口中运行多个独立的会话。tmux
提供了丰富的功能,包括会话管理、窗口分割、复制粘贴、窗口导航等,极大地提高了开发者的效率和多任务处理能力。本教程将通过一个实际的脚本示例,介绍如何使用 tmux
创建和管理会话,以及如何分割窗口来运行不同的命令。
1. tmux 基础:会话与窗口
tmux
的核心概念是会话(session)和窗口(window)。一个会话可以包含多个窗口,每个窗口又可以包含多个窗格(pane)。通过 tmux
,你可以在一个终端窗口中创建多个独立的会话,每个会话可以运行不同的应用程序或 shell 命令。
2. 创建和管理会话
当你第一次启动 tmux
时,它会创建一个新的会话。你可以使用以下命令来创建一个新的会话:tmux new-session -s <session_name>
,其中 <session_name>
是你为会话指定的名称。例如:
tmux new-session -s my_session
在我们的脚本示例中,我们使用了当前工作空间的文件夹名称作为会话名称,以确保每个工程都有独立的会话环境:
workspace_folder_basename=$(basename "$PWD")
session_name="vscode-${workspace_folder_basename}"
然后,我们检查是否存在同名的会话,如果存在,就先杀死该会话,再创建新的会话:
if tmux has-session -t "$session_name" 2>/dev/null; then
tmux kill-session -t "$session_name"
fi
最后,我们使用 -A
参数附加到会话,即使会话已经存在也会切换到该会话:
tmux new-session -A -s "$session_name"
3. 分割窗口
在 tmux
中,你可以通过分割窗口来同时运行多个命令。我们使用 split-window
命令来分割窗口:
split-window -h # 水平分割
split-window -v -t 1 # 垂直分割
在脚本中,我们创建了四个窗格,分别运行不同的命令:
split-window -h \; \
split-window -v -t 1 \; \
split-window -v -t 3 \;
然后,我们使用 select-pane
和 send-keys
命令来选择窗格并发送命令:
select-pane -t 1\; \
send-keys "bash scripts/docker/dev_start.sh && bash scripts/docker/dev_into.sh" C-m \;
4. 完整脚本示例
以下是完整的脚本示例,它展示了如何自动化创建 tmux
会话,管理会话,以及分割窗口来运行不同的命令:
#!/bin/bash
workspace_folder_basename=$(basename "$PWD")
if [ -f "$PWD/WORKSPACE" ]; then
session_name="vscode-${workspace_folder_basename}"
if tmux has-session -t "$session_name" 2>/dev/null; then
tmux kill-session -t "$session_name"
fi
tmux new-session -A -s "$session_name" \; \
split-window -h \; \
split-window -v -t 1 \; \
split-window -v -t 3 \; \
select-pane -t 1\; \
send-keys "bash scripts/docker/dev_start.sh && bash scripts/docker/dev_into.sh" C-m \; \
select-pane -t 2\; \
send-keys "sleep 5 && bash scripts/docker/dev_into.sh" C-m \; \
select-pane -t 3\; \
send-keys "cd ~/tools/ros_tools/ && source scripts/pluto.bashrc" C-m \; \
select-pane -t 4\; \
send-keys "cd ~/tools/ros_tools/ && source scripts/pluto.bashrc" C-m \;
else
echo "WORKSPACE 文件夹不存在,tmux 会话未启动。"
exit 1
fi
5. 效果展示

6. 结论
tmux
是一个强大的工具,它能够帮助你更好地管理终端会话,分割窗口,以及自动化任务。通过上述脚本示例,你已经了解了如何使用 tmux
创建和管理会话,分割窗口,以及运行命令。掌握这些基本操作,你将能够在日常开发中更加高效地使用 tmux
。
发表回复