欢迎光临
我们一直在努力

tmux_for_windows windows上面安装 git bash 2026年 正是专门为了解决“SSH 掉线后还能继续原来的会话”这个问题而设计的工具

tmux_for_windows

tmux是一个开源工具,用于在一个终端窗口中运行多个终端会话。本工具从msys2里提取,可以在Git for Windows的Git Bash (MingW64)下正常使用。

蘭雅sRGB 龙芯小本服务器 | https://262235.xyz

##tmux(以及 screen)正是专门为了解决“SSH 掉线后还能继续原来的会话”这个问题而设计的工具。

简单来说:

工具SSH 掉线后还能连上原来的会话吗?说明
普通 bash / zsh 不能 会话结束,进程收到 SIGHUP 信号,通常被杀死
tmux 会话独立于 SSH 连接存在,掉线后可以随时重新 attach
screen 和 tmux 功能几乎一样,但 tmux 现在更流行、功能更强
zellij 更现代的替代品,但普及度不如 tmux

tmux 的典型用法(SSH 掉线后重连)

  • 登录服务器后,先启动一个 tmux 会话

    tmux new -s mytrain # -s 后面是会话名字,随便起

  • 在 tmux 里面跑你的程序(比如训练脚本)

    python standalone_warmup_with_wandb.py ...

  • SSH 掉线了也没关系(关浏览器、断网、电脑关机都行)

  • 过一会儿重新 SSH 登录服务器,然后重新连上原来的 tmux 会话

    tmux attach -t mytrain
    # 或者简写
    tmux a -t mytrain

    连上后,你会看到程序还在跑,输出还在继续,窗口布局、进程状态全部保留。

  • 如果忘记会话名字了,可以先列出所有 tmux 会话

    tmux ls
    # 看到类似:
    # mytrain: 1 windows (created Tue Feb 25 19:45:12 2026) [80×24]

    然后再 attach 上去。

  • 常用快捷键(在 tmux 里按 Ctrl+b 再按下面键)

    • d → detach(脱离会话,但不关闭,程序继续跑)
    • c → 新建窗口
    • n / p → 切换下一个/上一个窗口
    • , → 重命名当前窗口
    • w → 窗口列表(鼠标或键盘选)
    • Ctrl+b ? → 查看所有快捷键帮助

    小贴士

    • 如果你经常用,建议把 tmux 配置得更舒服一点(~/.tmux.conf) 常见优化:

      # 改前缀键为 Ctrl+a(很多人觉得比 Ctrl+b 好按)
      set -g prefix C-a
      unbind C-b
      bind C-a send-prefix

      # 鼠标支持(可选)
      set -g mouse on

      # 窗口从 1 开始编号(更直观)
      set -g base-index 1
      setw -g pane-base-index 1

    • 如果服务器上没有 tmux,先安装:

      # Ubuntu/Debian
      sudo apt update && sudo apt install tmux -y

      # CentOS/RHEL
      sudo yum install tmux -y

    • 更极端的场景(怕 tmux 本身被杀) 可以再套一层 nohup 或用 systemd 服务,但 99% 的情况 tmux 就够用了。

    总结一句话:

    tmux 就是为“SSH 掉线后还能连回原来的程序”而生的,用起来非常稳。 只要你先 tmux new -s xxx 再跑训练,掉线后再 tmux a -t xxx 就能无缝接上。强烈建议你现在就试一次。

    tmux在windows系统下安装使用

    https://github.com/yanggg1133/tmux_for_windows/

    首先你要保证已经安装有 Git for Windows

    下载地址 https://git-scm.com/download/win

    关闭

    tmux kill-session -t 会话名

    tmux for Git Bash (MingW64) 安装包使用

    • 下载 tmux_for_git-bash.zip
    • 释放文件到 D:\\Git\\usr
    • ** 默认是C:\\Program Files\\Git\\usr**
    • 实际可执行文件在 D:\\Git\\usr\\bin\\tmux.exe

    ** 默认是C:\\Program Files\\Git\\usr\\bin**

    tmux 使用

    • Windows 开始菜单 运行 D:\\Git\\git-bash.exe
    • 命令行输入 tmux

    git-bash环境下命令行安装

    git clone https://github.com/hongwenjun/tmux_for_windows.git
    cd tmux_for_windows/
    unzip -x tmux_for_git-bash.zip -d /usr

    原始的 tmux for msys2 的安装包,不需要下载

    # tmux-2.7-1 旧版本 tmux_for_windows/tmux_271
    a31b2636ff7540ec11a38ac4d9c95dc9 libevent-2.1.8-1-x86_64.pkg.tar.xz
    a7ac01f4ccef1ecedf9ef346fb2c818e tmux-2.7-1-x86_64.pkg.tar.xz
    ba061b3687f77dde53658a95793e952e tmux_for_git-bash.zip # 旧版本

    # tmux-3.1-c1 新版本 tmux_for_windows/tmux_311
    9abfa52145cf5a7e591847f58a5253e3 libevent-2.1.12-2-x86_64.pkg.tar.zst
    b433f58e1267f5582de43d2e9d78d82d tmux-3.1.c-1-x86_64.pkg.tar.zst

    tmux 启用鼠标操作

    .tmux.conf 设定

    cd ~
    vim ~/.tmux.conf

    #
    # https://www.youtube.com/watch?v=xTplsyQaGFs

    # tmux 启用鼠标操作
    setw -g mouse
    set-option -g history-limit 20000
    set-option -g mouse on
    bind -n WheelUpPane select-pane -t= \\; copy-mode -e \\; send-keys -M
    bind -n WheelDownPane select-pane -t= \\; send-keys -M


    fish_for_git-bash

    Fish 是"the friendly interactive shell"的简称,最大特点就是方便易用。很多其他 Shell 需要配置才有的功能,Fish 默认提供,不需要任何配置。

    fish for Git Bash (MingW64) 安装包使用

    • 下载 fish_for_git-bash.7z
    • 释放文件到 D:\\Git
    • 实际可执行文件在 D:\\Git\\usr\\bin\\fish.exe

    fish 使用教程

    • http://fishshell.com/docs/current/tutorial.html

    原始的 fish for msys2 的安装包,不需要下载

    Path: tmux_for_windows/fish_312
    9cb0219a335d2b54c388cbf25c2ea456 bc-1.07.1-2-x86_64.pkg.tar.xz
    4fd6c824c616709966167fdc5f1a5195 fish-3.1.2-1-x86_64.pkg.tar.zst
    b882faf644ccd4770f7c3002e1dc6d71 groff-1.22.4-1-x86_64.pkg.tar.xz
    0d78c572a6cd9f0bf88e2b0ceedf62e6 libpcre2_16-10.35-1-x86_64.pkg.tar.zst
    f3d45b93b85a9d57c978224bd8111c09 libpipeline-1.5.2-1-x86_64.pkg.tar.xz
    4dd5d447bb0e160502afe95a1bafe044 man-db-2.9.3-1-x86_64.pkg.tar.zst

    把fish设为交互式shell

    如果不将fish设为默认shell,就能照常运行Bash的初始化脚本。这能够保证用户当前的环境变量不受影响并且在fish中也能使用,因为fish是作为Bash的子进程运行的。下面是几种只把fish设为交互式shell的方法。

    通过.bashrc启动fish

    保持默认shell为Bash不变,然后添加一行exec fish到合适的Bash配置文件中,比如.bashrc。在这种方法中,Bash会正常执行/etc/profile和/etc/profile.d中的所有配置文件。相对于之后几种方法,这种是最通用的,因为这种方法在本机计算机和SSH远程计算机上都能使用。

    使用终端复用器的选项

    要将fish设为tmux启动的默认shell,在~/.tmux.conf中加入这行:

    set-option -g default-shell “/usr/bin/fish”

    关闭问候语

    默认情况下,每次启动fish,fish都会打印问候语。要关闭问候语,可以在fish中运行:

    set -U fish_greeting

    网页界面

    通过下面命令即可用浏览器打开fish的配置页面。

    fish_config

    你现在遇到的这个提示 sessions should be nested with care, unset $TMUX to force,是因为你已经在一个 tmux 会话里,又尝试启动新的 tmux 会话(tmux 默认不推荐嵌套会话),所以给出了这个警告。

    问题分析与解决方法

    1. 先理解核心原因

    $TMUX 是一个环境变量,当你处于 tmux 会话中时,这个变量会被自动设置(指向当前 tmux 会话的套接字)。tmux 检测到这个变量存在,就会阻止你直接启动新的嵌套会话,避免使用混乱。

    2. 分场景解决
    场景 A:你想退出当前 tmux 会话,重新启动

    这是最常见的正常使用场景,步骤如下:

    • 先退出当前 tmux 会话:在 tmux 窗口中输入 exit 并回车,回到原生的终端界面。
    • 再重新启动 tmux:执行 tmux.exe,此时就能正常创建新的 tmux 会话,不会再出现警告。
    场景 B:你确实需要嵌套 tmux 会话(不推荐,仅特殊场景用)

    如果有特殊需求必须嵌套(比如远程服务器里的 tmux 套本地 tmux),可以强制取消 $TMUX 变量后启动:

    # 临时取消 $TMUX 变量,强制启动嵌套会话
    unset TMUX && tmux.exe

    ⚠️ 注意:嵌套会话会导致快捷键、窗格管理混乱(比如前缀键会被多层 tmux 拦截),非必要不建议这么做。

    场景 C:检查是否误进入 tmux(确认当前状态)

    如果你不确定自己是否在 tmux 里,可以执行以下命令验证:

    # 查看 $TMUX 变量是否存在
    echo $TMUX
    # 如果输出非空(比如类似 /tmp/tmux-1000/default,5678,0),说明当前在 tmux 会话中
    # 如果输出为空,说明在原生终端

    补充:tmux 基础使用小技巧

    避免后续再遇到类似问题,记住几个常用操作:

    • 新建会话:tmux new -s 会话名(比如 tmux new -s mysession,方便管理多个会话)
    • 列出所有会话:tmux ls
    • 分离会话(保留会话后台运行):按 前缀键(Ctrl+b) + d
    • 重新连接会话:tmux attach -t 会话名(比如 tmux attach -t mysession)
    • 关闭会话:在会话中输入 exit 或 tmux kill-session -t 会话名

    总结

  • 核心原因:当前终端已处于 tmux 会话中($TMUX 变量存在),tmux 阻止嵌套启动新会话。
  • 优先解决方案:执行 exit 退出当前 tmux 会话,再重新运行 tmux.exe。
  • 特殊场景:必须嵌套时用 unset TMUX && tmux.exe 强制启动(不推荐)。
  • 你提供的这段 tmux 配置整体思路是对的(启用鼠标、调整历史行数、绑定滚轮操作),但存在两处关键语法错误,会导致 tmux 解析失败(也就是你之前遇到的服务器退出、命令报错问题),我先帮你修正,再详细解释问题和原因。

    第一步:修正后的正确配置

    # tmux 启用鼠标操作(兼容不同 tmux 版本)
    setw -g mouse on # 旧版 tmux 窗口级鼠标配置(补全缺失的 on)
    set-option -g history-limit 20000 # 调整滚动历史行数(正确)
    set-option -g mouse on # 新版 tmux 全局鼠标配置(正确)

    # 绑定鼠标滚轮上下滚动(修正语法错误,适配 tmux 滚轮事件)
    bind -n WheelUpPane select-pane -t= \\; copy-mode -e \\; send-keys -M
    bind -n WheelDownPane select-pane -t= \\; send-keys -M

    第二步:你的配置中的核心问题分析

    问题 1:setw -g mouse 语法不完整(最关键)
    • 错误写法:setw -g mouse
    • 问题原因:tmux 的 mouse 选项是布尔型(开/关),必须指定 on 或 off,只写 mouse 会被 tmux 判定为“未知命令”,直接导致配置解析失败。
    • 修正:setw -g mouse on(补全 on,明确开启窗口级鼠标)。
    问题 2:WheelDownPane 绑定逻辑无错误,但需注意版本兼容(非语法错,优化点)

    你的 bind -n WheelDownPane 写法语法上没问题,但补充说明:

    • send-keys -M 是 tmux 用来传递鼠标事件的指令,滚轮向下滚动时不需要进入 copy-mode(向上需要),所以你的写法是合理的;
    • 部分新版 tmux 中 select-pane -t= 可以简化为 select-pane,效果一致,不影响使用。

    第三步:配置解释(帮你理解每一行的作用)

    配置行作用说明
    setw -g mouse on 针对 tmux 2.1 及以下版本,开启窗口级鼠标支持(选窗格、调整大小等)
    set-option -g history-limit 20000 将 tmux 终端的滚动历史行数从默认(约2000)提升到20000,能滚动看更多历史输出
    set-option -g mouse on 针对 tmux 2.2+ 版本,开启全局鼠标支持(新版推荐写法,覆盖窗口/会话级)
    bind -n WheelUpPane … 绑定鼠标滚轮向上:选中当前窗格 → 进入复制模式 → 触发向上滚动事件
    bind -n WheelDownPane … 绑定鼠标滚轮向下:选中当前窗格 → 触发向下滚动事件(无需复制模式)

    第四步:验证配置是否生效

    修复后按以下步骤验证,确保无报错:

  • 保存修正后的配置到 /c/Users/Administrator/.tmux.conf;
  • 先杀掉可能崩溃的 tmux 进程:tmux kill-server
  • 重新加载配置并启动 tmux:tmux source /c/Users/Administrator/.tmux.conf
    tmux.exe
  • 验证效果:
    • 鼠标能点击切换窗格、拖动调整窗格大小;
    • 滚轮能上下滚动查看终端历史输出;
    • 无任何 unknown command 或 server exited unexpectedly 报错。
  • 总结

  • 核心错误:setw -g mouse 缺少 on,导致 tmux 解析配置时识别为无效命令,是服务器崩溃的主要原因;
  • 其他要点:你的滚轮绑定逻辑正确,仅需补全鼠标选项的 on 即可正常使用;
  • 关键验证:修复后执行 tmux kill-server + tmux source 配置文件 + tmux.exe,无报错且鼠标/滚轮功能正常即为配置生效。
  • 如果启动后还有小问题(比如滚轮滚动不灵敏),可以告诉我你的 tmux 版本(执行 tmux -V 查看),我再帮你微调适配版本的配置。

    你现在遇到的这个错误包含两个核心问题:一是 [server exited unexpectedly] 说明 tmux 服务器意外退出,二是 usage: send-keys [-FH1MRX] [-N repeat-count] [-t target-pane] key 提示你使用 send-keys 命令时格式错误,这两个问题通常是因为 .tmux.conf 配置文件里的 send-keys 命令写法不合法,导致 tmux 启动时解析失败、服务器崩溃。

    问题分析与解决步骤

    1. 先定位核心原因

    send-keys 是 tmux 里用于向指定窗格发送按键/命令的指令,它有严格的语法要求:

    • 必须指定 目标窗格(可选) 和 要发送的键/命令(必选)
    • 不能有多余的字符、错位的参数,也不能缺少核心的“要发送的内容”

    你的错误就是配置文件中某一行 send-keys 命令的参数/格式写错了,tmux 启动时解析失败,直接导致服务器意外退出,并抛出用法提示。

    2. 具体解决步骤
    步骤 1:临时跳过配置文件,验证问题根源

    先启动不加载配置的 tmux,确认是配置文件的问题:

    # 启动 tmux 但不加载 .tmux.conf,验证是否能正常运行
    tmux -f /dev/null new-session

    如果能正常进入 tmux 会话,说明确实是 .tmux.conf 里的错误配置导致的问题;如果还是报错,再检查系统环境,但99%的情况都是配置文件的问题。

    步骤 2:检查并修复 .tmux.conf 中的 send-keys 命令

    打开你的配置文件,找到所有包含 send-keys 的行,按正确语法修正:

    # 编辑配置文件
    vim /c/Users/Administrator/.tmux.conf

    常见错误示例 & 修正方案
    错误写法(导致崩溃)正确写法(示例)说明
    send-keys(无任何参数) send-keys "ls -l"(发送命令) 必须指定要发送的内容
    send-keys -t 1(缺内容) send-keys -t 1 "cd /tmp"(指定窗格+内容) 参数不完整,缺核心的key
    send-keys "echo hello" -N(参数错位) send-keys -N 2 "echo hello"(参数在前) 参数要写在内容前面
    正确的 send-keys 用法示例(可参考)

    如果你的配置里想绑定快捷键并发送命令,正确写法比如:

    # 示例1:绑定 F5 键,向当前窗格发送 "clear && ls" 并回车
    bind F5 send-keys "clear && ls" C-m

    # 示例2:新建窗格后,自动发送 cd 命令到新窗格
    bind -n C-s split-window -v \\; send-keys -t bottom "cd /c/Users/Administrator" C-m

    # 示例3:重复发送 2 次 "hello" 到编号为 1 的窗格
    send-keys -N 2 -t 1 "hello"

    ⚠️ 关键:C-m 代表“回车”,如果想让发送的命令自动执行,必须加这个;所有参数(-N/-t等)要放在“要发送的内容”前面。

    步骤 3:保存并验证修复
    • 保存配置文件:vim 中按 Esc → 输入 :wq 回车。
    • 重新加载配置并启动 tmux:# 先杀掉崩溃的 tmux 服务器
      tmux kill-server
      # 重新加载配置
      tmux source /c/Users/Administrator/.tmux.conf
      # 启动 tmux
      tmux.exe

    如果能正常进入 tmux 会话,说明配置已修复;如果还有报错,继续检查配置文件中其他 send-keys 行,确保没有语法错误。

    3. 补充:如果找不到 send-keys 错误行

    如果不确定哪一行错了,可以清空配置文件,逐行添加配置并测试,定位错误行:

    # 先备份原配置
    cp /c/Users/Administrator/.tmux.conf /c/Users/Administrator/.tmux.conf.bak
    # 清空配置文件
    echo "" > /c/Users/Administrator/.tmux.conf
    # 启动 tmux,确认能正常运行
    tmux.exe

    然后逐行把备份的配置加回去,每加一行就执行 tmux source 配置文件 测试,直到出现报错,就能精准定位错误的 send-keys 行。

    总结

  • 核心原因:.tmux.conf 中 send-keys 命令语法错误(缺参数/参数错位/无发送内容),导致 tmux 解析失败、服务器意外退出。
  • 修复关键:检查配置文件中所有 send-keys 行,按 send-keys [参数] 要发送的内容 格式修正,确保参数完整、顺序正确。
  • 验证方法:先通过 tmux -f /dev/null 确认 tmux 本身可用,再修复配置文件,重启 tmux 验证是否正常运行。
  • 赞(0)
    未经允许不得转载:171主机测评 » tmux_for_windows windows上面安装 git bash 2026年 正是专门为了解决“SSH 掉线后还能继续原来的会话”这个问题而设计的工具
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址