Git bash 在使用control+c、control+v之后,打字没有回显的问题

一次偶然,在Git bash窗口中复制一些信息,切回来之后发现,居然无法打字了,而按回车却有反应。一番搜索之后,也算是找到了解决方案。输入reset 然后回车

摘录自网上的Root cause:

当运行shell或shell中的大多数程序时,您输入的任何内容都会通过内核的TTY子系统返回到用户的终端。对于擦除字符,Ctrl+R,Ctrl+Z等等,还有其他特殊的处理方式。

某些程序,特别是从命令行运行的程序(特别是编辑器)不需要或不想这样做。出于这个原因,他们用IOCTL调用TY(终端)设备向内核发出信号,表示他们不希望出现这种行为。他们也不想让特殊人物做特别的事情。相反,他们要求内核采用“原始”模式。特别是,编辑器的VIM关闭了各种“回显设置”。所有这一切都适用于计算机串行线上的真实TTY终端,或Alt+Ctrl+F1上的虚拟终端,或者当您在GUI下运行GNOME终端时得到的真正的虚拟终端。

这些程序应该通过输入退出编辑器命令或接收信号(例如来自Control+C)来重置它们在退出之前正在使用的虚拟TTY上更改的任何模式。

如果他们不能正确地做到这一点,那么TTY就会处于你所发现的有趣的状态中。由于程序可能无法重置终端,reset命令以允许用户恢复。

我假设中断干扰了您正在运行的python软件。我猜该程序没有机会重置终端,或者根本没有这样做。

在VIM情况下,当我运行您的示例时,我得到了您描述的相同的行为。我还看到一条消息“Vim:警告:输入不是来自终端”(当您重置时它就消失了)。这是因为VIM不是通常从shell启动的。相反,“grep”和“xargs”命令一直在使用标准输入(通常由TTY占用),以便将文件名从grepxargs.

在发布的输出中stty -a我们可以看到“-回声”,也证实了这就是问题所在。如果您要杀死VIM,使其无法优雅地处理信号,您可能会看到同样的问题。

VIM案例的一个解决方案是避免使用xargs,而是使用:

 vim $(grep foo * -l)

在这里,文件列表是由shell构造的,就像以前由xargs构造的那样,但是shell正在调用vim,它直接连接到TTY。有发送到错误输出文件的警告消息,并且vim正确地设置和重置TTY设置。

貌似不止一种方法

1、 reset 

2、stty sane (保留之前的内容)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值