Bash shell 在回车时不会开始新行,并且不会显示键入的命令

Bash shell 在回车时不会开始新行,并且不会显示键入的命令

在 lxterminal 窗口中运行的交互式 bash shell 中,我不知道我搞砸了什么。

键入 Return 键不会开始新行,但 Ctrl-C 会。

$ ^C
$ $ $ $ $ ^C
$ ^C
$ $ $ $ $ $ $ 

当我键入命令时,虽然按 Return 键将执行该命令,但键入的命令不可见。

在此之前,我正在运行一些命令sudo lsof ... | less(或sudo netstat ... | less),并且似乎没有输出,因此我以任意顺序多次按下 ctrl-c 和/或 q 。当我最终退出时less,bash 的问题发生了。

我是否不小心将 shell 的标准输出重定向到其他地方?

有什么方法可以在不关闭 shell 的情况下解决问题吗?

答案1

我认为您的终端可能陷入“有趣”模式。您可能可以使用/usr/bin/reset通常随ncurses库附带的命令重置它。

答案2

如果reset(在另一个答案中提出)不起作用,请尝试:

stty sane

也许后面是

tput rs1

我定义了以下别名(我猜我在 stackoverflow 上的某个地方找到了它):

alias   fixtty='reset; stty sane; tput rs1; clear; echo -e "\033c"'

答案3

正如其他答案所建议的,最简单的解决方法就是运行reset.

至于原因呢?当您cat(或以其他方式输出)二进制文件或数据到终端时,通常会发生这种情况。

文本只是文本,不会被终端特殊处理,但也有一些不是文本的特殊字符,用于执行诸如移动光标、清除屏幕、更改颜色、停止回显输出等操作。

当您输出二进制数据(而不是文本)时,终端将看到这些特殊控制字符并尝试在它们出现时解释它们。您可能会注意到屏幕清晰、闪烁或跳跃 - 这都是由于这些控制字符受到尊重。您可以通过head /dev/urandom在新终端中运行来进行实验,看看我的意思。

大多数时候,如果您的终端无论如何都表现得很奇怪,只需运行reset即可修复它,只需回显将终端设置为基本默认模式所需的所有特殊字符 - 例如,有一个stop echoing input代码,还有一个start echoing input代码。二进制数据随机包含前者,这就是为什么您看不到您输入的内容,并且reset将包含后者(以及其他),这将修复它。

相关内容