一致地破坏 bash 终端的正确方法是什么?

6 shell bash terminal

我在 OSX 10.11.1 上,偶尔我的 bash 终端会损坏。当我不小心cat使用二进制文件时,经常会发生这种情况。结果可以在下图中看到。输出变得很奇怪,我不能再输入 ascii 字符了。

在此处输入图片说明

尽管这种情况偶尔会发生,但我无法找到始终重现该问题的方法。在线搜索建议这样做cat /bin/*,但偶尔会起作用,只有在尝试了几十次之后。

我想这样做,所以我可以找到一个简单的解决方案,如何在tmux.

我如何始终将 bash 置于“损坏”状态?是否有一个神奇的 unicode 字符可以做到这一点?

Mik*_*kel 10

这看起来像DEC 特殊图形字符集

阅读xterm 控制序列文档,听起来终端在接收ESC ( 0.

所以你应该能够使用

printf '\033(0'
Run Code Online (Sandbox Code Playgroud)

或者

printf '\033(0' > corrupt-my-terminal
cat corrupt-my-terminal
Run Code Online (Sandbox Code Playgroud)

并重新使用

printf '\033(B'
Run Code Online (Sandbox Code Playgroud)

根据相同的页面选择USASCII。


其他恢复状态的方法包括

tput sgr0  # resets all terminal attributes to their defaults
Run Code Online (Sandbox Code Playgroud)

reset      # reinitializes the terminal
Run Code Online (Sandbox Code Playgroud)

您可以tput sgr0PROMPT_COMMAND(bash) 或precmd(zsh) 中确保它始终自动重置。


或者您也可以确保使用lessvim或其他什么比cat以查看文件。

如果文件少于一页,要使less行为类似cat并自动退出,请运行less -FX或执行export LESS=-FX

或者,如果您不想总是使用这些less选项,请创建一个新别名,例如

alias c='less -FX'
Run Code Online (Sandbox Code Playgroud)