74

有时我不得不运行一个命令行工具(一个 Python 脚本),它的输出似乎破坏了我的终端。执行完成后,输入反馈消失了(我看不到我在输入什么),也没有显示换行符。如果终端是通过远程启动的Putty,也会在本地启动时发生这种情况gnome-terminal

例如,问题发生后,如果我输入ENTER pwd ENTER,我希望看到:

[userA@host006 ~]$
[userA@host006 ~]$ pwd
/home/userA
[userA@host006 ~]$

但实际上输出是:

[userA@host006 ~]$ [userA@host006 ~]$ /home/userA
                                                             [userA@host006 ~]$

修复它的唯一方法是关闭该终端并启动一个新终端。

也许是相关的:脚本输出包含一些基于终端的格式(例如反转前景/背景以突出显示一些状态消息)。如果我将此输出转储到文件中,我可以看到类似[07mSome Message Here[0m.

有什么想法可以防止这种情况发生吗?

4

2 回答 2

162

执行命令reset,您的终端应该会恢复(参考)。

此问题通常发生在将二进制数据转储到终端STDOUT时,当处理接收到的转义码时,可以执行任何操作,例如更改文本颜色、禁用回显,甚至更改字符集。

避免这种情况的简单方法是确保您不会将未知的二进制数据转储到终端,如果您必须将其转换为十六进制以确保它不会更改终端设置。

于 2013-07-16T17:20:38.180 回答
15

为了详细说明Joshua Briefman 的回答,执行reset -c只会重置导致您的问题的控制字符:

tset, reset- 终端初始化

Usage: tset [options] [terminal]

Options:
  -c          set control characters
  -e ch       erase character
  -I          no initialization strings
  -i ch       interrupt character
  -k ch       kill character
  -m mapping  map identifier to type
  -Q          do not output control key settings
  -r          display term on stderr
  -s          output TERM set command
  -V          print curses-version
  -w          set window-size

另请注意以下形式的命令手册

请注意,您可能需要输入

<LF>reset<LF>

(换行符通常是 control-J)让终端工作,因为回车在异常状态下可能不再工作。此外,终端通常不会回显命令。

于 2018-04-12T07:50:52.397 回答