在 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
将包含后者(以及其他),这将修复它。