无法在 MinGW/msys shell 或终端中键入“e”或“P”

Posted

技术标签:

【中文标题】无法在 MinGW/msys shell 或终端中键入“e”或“P”【英文标题】:cannot type 'e' or 'P' in MinGW/msys shells or terminals 【发布时间】:2011-02-05 07:02:00 【问题描述】:

我过去曾成功安装并使用过 MinGW 和 msys 来编译和链接 Windows 可执行文件。在全新安装 32 位 Vista(与我之前成功时的平台相同)时,我遇到了一些令人抓狂的行为:当我在提供的 shell 环境中键入小写的“e”或大写的“P”时,我得到了一声哔哔声,但没有字符!这意味着我不能输入“make”或“echo”然后运行这些命令,例如。它响起:m-a-k-BEEP!

当您通过安装程序生成的快捷方式调用 msys 时打开的 shell 中以及通过导航到 c:\msys\1.0\bin 并双击 bash 时打开的 shell 中会出现这种没有“e”的蜂鸣声。 exe、sh.exe、rxvt.exe(实际上,它的噪音比清脆的 BEEP 更多),但总是小写的“e”和大写的“P”不会回显到终端(或外壳?显然我不了解这些术语之间的差异)。

我已经尝试了自动 MinGW 和 msys 安装程序,并在同一端进行了全新的手动安装。

我不太了解 shell,或者它们的环境在启动时如何演变,所以我不知道从哪里开始寻找这种古怪行为的根源。

【问题讨论】:

Windows 上的 git shell 也有同样的问题,但新的 MinGW 的 bash 却没有。 (同样的修复工作)......也许这是特定于某些 MSys 版本? 【参考方案1】:

我假设您正在使用 Bash。在我看来,键绑定由于某种原因搞砸了。

如果你执行这个命令:

bind -p|grep -i '"[pE]"'

你应该得到这个结果:

"E": self-insert
"e": self-insert
"P": self-insert
"p": self-insert

如果缺少“P”和“e”的条目,请尝试这些命令。

bind '"e":self-insert'
bind '"P":self-insert'

显然,您无法键入字符,因此请键入它们的相反大小写版本,按左箭头,然后按 Alt-u 将小写“p”或 Alt-l(即小写“ell ") 将大写字母 "E" 小写(您需要在第一个命令中为 each "e" 执行此操作)。

如果可行,请检查 ~/.inputrc 文件中的无效键绑定。另外,请检查您的启动文件,例如~/.bashrc 等。问题可能是引号丢失或放错了位置,并且可能与\eP 之类的键绑定有关,默认情况下,它绑定到 readline函数do-lowercase-version

【讨论】:

您的指示效果很好。我能够看到确实“P”和“e”没有自插入绑定,将它们添加进去,一切正常。然后我开始四处寻找,果然在我的 '~/.inputrc' 文件中发现了我添加的违规行,认为它们是良性的:'echo $PATH' 和 'PATH = $PATH:/c/MinGW/msys/1.0 /斌:。和“echo $PATH”,无论出于何种原因导致问题,并在取出时修复它。谢谢! @dim fish:是的,~/.inputrc 不是可执行文件,因此您不能在其中放入命令。 @DennisWilliamson 我对“b”也有同样的问题。我对“e”有同样的问题,我通过从.inputrc中删除所有设置来解决这个问题。在“b”插入一个双引号之前,现在按“b”插入一个无限的双引号字符串,直到我按 ctrl-c。我将bind '"b":self-insert' 放入 inputrc 但没有任何变化。我的 msys 非常小,除了 coreutils 几乎没有包。 @otonvm: bind 是一个 shell 命令,因此您可以在 shell 脚本中使用它(例如 ~/.bashrc)。但是,要在 ~/.inputrc 中添加键绑定,请省略 bind 命令和外部单引号集。另请注意,点是名称.inputrc的第一个字符 @DennisWilliamson 啊,我现在明白了!我只是假设 .inputrc 与 .profile 或 .bash_profile 相同。现在很明显了。谢谢! (我应该更好地阅读评论,对不起!)【参考方案2】:

在目录 C:\Documents and Settings\yourusername 中,您可以找到一个名为 '.bashrc' 的文件 添加以下2行 绑定 '"e":self-insert' 绑定 '"P":self-insert'

丹尼斯威廉姆森,非常感谢!这个问题困扰了我很久。

【讨论】:

以上是关于无法在 MinGW/msys shell 或终端中键入“e”或“P”的主要内容,如果未能解决你的问题,请参考以下文章

SqlCipher Mingw/msys 问题

在 msysgit 中运行 MinGW/MSYS 工具

Mingw+MSYS 中的 libevent 静态编译错误

在 MinGW/MSYS 上进行安装不喜欢 --prefix=/mingw

使用 MinGW/MSYS 制作“xz-5.2.1”时出错

为啥 MinGW/MSys 会更改二进制路径?