Linux 终端:输入反馈消失,不显示换行符

Posted

技术标签:

【中文标题】Linux 终端:输入反馈消失,不显示换行符【英文标题】:Linux Terminal: typing feedback gone, line breaks not displayed 【发布时间】:2013-07-15 00:16:11 【问题描述】:

有时我不得不运行一个命令行工具(一个 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 的内容。

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

【问题讨论】:

您似乎处于一个子shell 中,您需要退出该子shell 才能返回原来的终端。试试 exit;pwd 这与 SO 无关;属于Unix & Linux 或Super User。也就是说,您通常可以通过盲输入 stty sane 来修复损坏的终端会话,这会将您的终端恢复到“正常”设置。 另外,当您遇到终端问题时,您可以尝试使用resetstty sane 修复它们。 相关askubuntu.com/questions/171449/… 【参考方案1】:

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

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

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

【讨论】:

非常感谢!在我的情况下,在 Kubernetes 容器中运行 ipython 没有显示输入的输入,执行 reset 修复了它。 当我在 ssh shell 中执行 bash x.sh 时遇到了同样的问题。 reset 确实有帮助,但如果我再次执行 .sh 文件,问题就会再次出现。你有什么主意吗? (.sh 文件基本上只是执行sbt package 来构建我的scala 项目)【参考方案2】:

详细说明Joshua Briefman's answer,执行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

还要注意以下形式的命令manual:

注意,您可能需要输入

<LF>reset<LF>

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

【讨论】:

以上是关于Linux 终端:输入反馈消失,不显示换行符的主要内容,如果未能解决你的问题,请参考以下文章

BAT命令怎么换行?

ubuntu中的VI编辑器按I进入文本编辑模式,为啥按上下左右键是换行显示ABCD字母?如何更改?谢谢!

python中怎么换行?

以不显示换行符结束的 Python 输入

Linux终端下的退格和删除键^H ^? ^[[3~ 杂记

正确显示textarea中输入的回车和空格