Bash隐形打字

时间:2016-01-17 22:13:51

标签: python linux bash

很长一段时间我面临的事实是linux中的bash有时会停止打印我正在输入的符号。当我打印时,文本没有出现在控制台窗口,但它实际进入。我可以检查这个键入一个特殊的字符,如Ctrl-C或Enter,这看起来像:

^\Quit (core dumped)
[kirill@localhost my]$ [kirill@localhost my]$ [kirill@localhost my]$ 

当我调试我的python脚本并使用stdout处理程序进行操作时,我可以极大地重现这一点。在调试期间按Ctrl + |在5个案例中的4个案例中,我将看到上述问题。 为什么会发生这种情况以及如何让我的控制台恢复正常生活?

2 个答案:

答案 0 :(得分:5)

  

为什么会发生这种情况......

好问题。

基本上,终端比它们看起来更复杂。

某些值会被终端解释为更改其行为的命令序列。在作为最终用户的交互式使用期间,您通常不必担心这一点。但有时这些命令会被意外触发,例如:如果您cat二进制文件或应用程序使用其他输入模式但未正确关闭。

  

......以及如何让我的控制台恢复正常生活?

运行stty sane通常会有所帮助:

  

将所有模式重置为合理的值,以便交互式终端使用。

另请参阅https://unix.stackexchange.com/a/79686/12606,其中建议您使用tput rs1执行此命令。我自己没有使用过这个最后一个命令,但是下次stty sane本身不能解决问题时会尝试使用它。

答案 1 :(得分:2)

终端驱动程序通常在键入字符时回显字符。 然而,这对于ncurses(3)终端屏幕应用程序来说是不合需要的,可能是从屏幕菜单中选择选项,或者在诸如vi(1)的编辑器中选择。回声字符会使屏幕变得混乱,并混淆了格式。

所以基本上echo是一个终端驱动程序选项,终端可以进入原始模式,应用程序负责所有输入字符处理。

同样,如果控制字符被发送到终端,它可能会被置于一个不按预期显示字符的模式。如果将垃圾发送到终端,这是一个常见的错误。

我应该在文件中创建测试文本输入,重定向stdout和amp; stderr到一个文件并使用od(1)进行调查,以确切地查看输出的字符以检查实际发生的情况。