我尝试使用可执行文件尝试命令cat

cat /bin/ls


现在我无法在此终端(Linux控制台)中读取任何单词。我该如何解决?

评论

如果我理解正确,可能是您的端子已拧紧;尝试输入reset。

二进制文件转储到终端后如何修复终端的可能重复项?

实际上,我认为这里的答案更好,因此更好地将其标记为dup

#1 楼

例如,通常在Unix / Linux终端(Bash)中,您经常使用命令morelesscat查看文件。当您执行此操作并且不希望查看文件时(例如/bin/ls),您将获得如下输出:

您只是试图查看一个程序文件。我上面没有提到过要用标准查看器查看的可执行文件。

方法1-重置

要解决此问题,您可以执行以下操作:


多次按下Control + C(Ctrl + C)
键入命令reset并按回车键

通常这应该将终端放回原处进入更正常的模式。我还要提到一件事,当您执行上述步骤时,请在终端中将它们盲目键入。因此,只需确保正确输入即可。

方法#2-stty sane

如@sendmoreinfo的注释所建议,使用以下命令可能会更好相反,如果上述方法不起作用:

$ stty sane
$ tput rs1


确定文件的类型

顺便说一句,如果遇到文件而没有确定是否要弄乱终端,可以使用命令file检查文件,该命令将报告文件的类型。例如,使用/bin/ls,该文件将显示以下输出:

$ file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped


评论


重置不是100%治愈终极疯狂的方法。尝试stty sane,然后输入rs1。

–sendmoreinfo
2013年6月17日14:22

@sendmoreinfo-谢谢,我已将您的建议添加到答案中。我曾经用过stty sane,但从来没有tput。

–slm♦
2013年6月17日15:01

实际上,我需要对此进行更多研究。 reset应该发送rs1字符串。一个好的测试(至少对于xterm来说)是使光标不可见,并查看reset是否将其恢复。

–sendmoreinfo
2013年6月17日17:15

重置在我的情况下有效

– code_monk
2015年3月8日14:06
清除也适用于轻度病例。

– Navin
2015年11月2日,下午5:41

#2 楼

我曾经遇到过resetstty sane的所有常用技巧都没有起作用的情况(在python字节数组上意外调用print之后)。我在此有用的博客上列出的方法2取得了成功。

我创建了一个最有用的别名:

alias fix='echo -e "3c"'


评论


我知道这很旧,但这是上面对我有用的唯一答案!谢谢

– jredd
16年6月1日在18:31

这个回显-e“ \ 033c”帮助我清理了字符混乱的SSH登录终端会话,该会话在cat / etc / localtime之后混在一起。

–专业备份
16 Dec 20 '21:17



这与OpenBSD一起使用,而其他所有人都没有。

– DHW
17年4月19日在5:38



通过对screen(1)的进一步实验,发现所有会话(-D)均已强制解除分配,然后在底层终端屏幕上运行了reset命令,可以解决此问题。可能还需要重命名损坏的窗口名称,这可能会在终端上重新显示相同的二进制数据,从而导致其损坏(然后再次重置)。

–数学
17-10-18在4:41

使用vi之后,通过SOL连接到远程linux主机的控制台后,我的终端大小(LINES)减少了大约一半。远程会话的LINES = 24,而我的本地MAC会话的LINES = 51。 echo -e“ \ 033c”为我工作,但是我尝试过的其他修复都没有做过(“ stty sane”,tput rs1,tput sgr0,reset)。

–马克
17年12月19日在19:33

#3 楼

没有一个先前的答案对我有用。但这似乎可以解决问题。.bashrc中添加:

alias fix='reset; stty sane; tput rs1; clear; echo -e "3c"'


,然后在出现问题时键入此内容(即使您可能看不到它!)

(ctl-c, ctl-c, ctl-c)
fix


非常感谢以前的提交者。另外,作为一个附带说明,当您显示那些可执行文件(或密钥库等)时,您的终端出现混乱的原因是,这些文件通常包含作为控制代码的二进制序列。控制代码可能会做一些随机的事情,例如切换到图形字符集,将前景色和背景色设置为相同的东西等。

评论


同样发生了。没什么对我有用,只是这个组合...

– TrueY
18年2月16日在16:56

我叫我理智

–qodeninja
19 Mar 16 '19在5:25

#4 楼

我的别名与上一篇文章几乎相同,只是做了一个小改动(tput reset而不是rs1)和一个添加的命令(setterm -reset):

alias clr='echo -e "3c" ; stty sane; setterm -reset; reset; tput reset; clear'


#5 楼

tmux用户也许可以将所有这些命令发送到他们的外壳,但是重置不会提升到tmux窗格。

创建新的tmux窗口:
ctrl-B c
tmux list-panes
请注意您认为很讨厌的窗格编号,通常是0。让我们称它为PPP

选择tmux窗口,其中XXX是钻孔的窗口号,不一定与窗格号相同。
ctrl-B XXX
tmux send-key -R -t PPP

然后您将在此问题的其他答案中看到所有命令,这些命令已放入您的shell中,但没有起作用!也许盲目的tmux send-key -R -t PPP可以工作,但我无法测试。

#6 楼

上方没有任何帮助。但是,杰克·沃西(Jack Wasey)提到了tmux,所以我只运行了tmux,再次退出,一切都恢复了正常。

另一个解决方案是:

reset


#7 楼

我知道这已经有一段时间了,但是尽管其他许多答案都对我有用,但重置,stty健全,有时这些都不对我有用,我总是求助于:

echo ^v^o


回显Ctrl + V,然后按Ctrl + O

#8 楼

除了建议如何重置终端的其他答案外,我认为除非有适当的保护,否则无法避免损坏。因此,我最好将输出发送到简单的文本友好型转换器cat -v

docker logs myjenkinscontainer 2>&1 | cat -v


使用hexdump -Cvi -R似乎可以查看和编辑二进制文件(:%!xxd -g1用于十六进制视图, :%!xxd -g1 -r用于保存十六进制更改)。

评论


花了一段时间才知道termcap / terminfo适用于应用程序。也就是说,它们是终端的“用户手册”,并且不会保护终端免受其忽略由可视化问题引起的应用程序发送的解释转义和控制字符的影响。幸运的是,tmux和它之间的选项之间有一层,以避免将底层应用程序转换为应用程序发送到其虚拟屏幕驱动程序的特殊字符set-option -ga terminal-overrides , *转换为底层终端(并拖放!): enacs @:smacs @:rmacs @:acsc @'。该选项在tmux的最新版本(例如2.3)中有效。

–鳗鱼ghEEz
20 Dec 24'3:15