You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 10 Git Bash运行Pry gem报Bad file descriptor错误,CMD正常

报错根因

该错误的触发逻辑明确可查:

  • Ruby 3.0版本开始,Pry默认使用内置的Reline库完成终端输入读取
  • Git Bash的终端基于类Unix伪终端(PTY)实现,和Windows原生控制台的文件描述符权限模型存在差异
  • Reline尝试切换到终端raw模式获取光标位置时,调用的系统接口不匹配Git Bash的PTY权限规则,最终抛出Bad file descriptor错误
  • CMD作为Windows原生控制台,和Ruby的原生接口完全适配,因此不存在同类故障。
可落地修复步骤

按操作复杂度从低到高排序:

步骤1:修改Pry全局配置

在用户目录(如C:/Users/<你的用户名>/)下创建.pryrc配置文件,写入以下内容:

# 强制绑定Pry的标准输入输出,跳过Reline的自动终端检测
Pry.config.input = STDIN
Pry.config.output = STDOUT
# 关闭Windows环境下的控制台兼容警告
Pry.config.windows_console_warning = false

保存配置后,重新在Git Bash中启动Pry会话即可验证效果。

步骤2:修正Git Bash启动方式

如果步骤1完成后仍出现报错,检查Pry的启动逻辑:

  • 不要将Pry的输出通过管道重定向给其他程序(比如pry | cat、pry | less),这类操作会将Pry绑定的文件描述符修改为只读模式,导致终端raw模式调用权限不足
  • 不要直接调用Ruby安装目录下的ruby.exe、pry.exe可执行文件启动会话,这类进程会直接绑定Windows原生控制台句柄,和Git Bash的PTY接口不兼容;需要通过Git Bash自带的winpty命令完成终端映射后再启动,示例命令:winpty pry

步骤3:替换Pry的输入读取后端

如果上述步骤均无法解决兼容问题,可以为Pry安装轻量输入读取模块,完全跳过Reline依赖:

gem install pry-coolline

安装完成后,在.pryrc中补充以下配置,强制Pry使用新的输入后端:

Pry.config.input = Pry::Cooline.new
Pry.config.output = STDOUT

若需要在Windows环境下获得完整的终端色彩、光标控制能力,可安装ansicon组件完成终端接口的兼容映射,安装后无需额外修改Pry配置即可正常运行。


内容的提问来源于stack exchange,提问作者Agustín A. Bernal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 05:45:04