tmux 入门教程:自动化会话管理与窗口分割

在 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


已发布

分类

,

来自

标签:

评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注