在 lxterminal 窗口中运行的交互式 bash shell 中,我不知道我搞砸了什么。
键入 Return 键不会开始新行,但 Ctrl-C 会。
$ ^C
$ $ $ $ $ ^C
$ ^C
$ $ $ $ $ $ $
Run Code Online (Sandbox Code Playgroud)
当我输入命令时,虽然按回车键会执行它,但输入的命令是不可见的。
在这之前,我正在运行一些命令sudo lsof ... | less(或sudo netstat ... | less),但似乎没有输出,所以我以任意顺序多次按 ctrl-c 和/或 q。当我终于退出时less, bash 的问题发生了。
我是否不小心将 shell 的 stdout 重定向到了其他地方?
有没有办法在不关闭我的外壳的情况下解决问题?
use*_*709 23
我认为您的终端可能陷入了“有趣”模式。您可能可以使用该/usr/bin/reset命令重置它,该命令通常与ncurses库一起提供。
Ral*_*alf 11
如果reset(在另一个答案中提出)不起作用,请尝试:
stty sane
Run Code Online (Sandbox Code Playgroud)
也许紧随其后
tput rs1
Run Code Online (Sandbox Code Playgroud)
我定义了以下别名(我猜我是在 stackoverflow 的某个地方捡到的):
alias fixtty='reset; stty sane; tput rs1; clear; echo -e "\033c"'
Run Code Online (Sandbox Code Playgroud)
小智 8
正如其他答案所暗示的那样,最简单的修复就是运行reset.
至于原因呢?当您cat(或以其他方式输出)二进制文件或数据到终端时,通常会发生这种情况。
文本只是文本,终端不会对其进行特殊处理,但也有一些特殊字符不是文本,用于执行诸如移动光标、清除屏幕、更改颜色、停止回显输出等操作.
当您输出二进制数据(而不是文本)时,终端会看到这些特殊的控制字符,并在它们出现时尝试解释它们。您可能会注意到屏幕清除、闪烁或跳跃——这都是由于这些控制字符受到尊重。您可以通过head /dev/urandom在新终端中运行来进行实验以了解我的意思。
大多数情况下,如果您的终端在任何情况下都表现reset得很奇怪,只需运行即可修复它,只需回显将终端设置为基本默认模式所需的所有特殊字符 - 例如,有stop echoing input代码和start echoing input代码。二进制数据随机包含了前者,这就是为什么您看不到您的输入内容的原因,并且reset将包含后者(以及其他),这将修复它。