答案1
这看起来像DEC特殊图形字符集。
正在阅读xterm 控制序列文档,听起来终端在接收时使用了那些ESC
(
0
。
所以你应该能够使用
printf '\033(0'
或者
printf '\033(0' > corrupt-my-terminal
cat corrupt-my-terminal
并返回使用
printf '\033(B'
根据同一页面选择 USASCII。
恢复状态的其他方法包括
tput sgr0 # resets all terminal attributes to their defaults
和
reset # reinitializes the terminal
您可以tput sgr0
在您的PROMPT_COMMAND
(bash) 或precmd
(zsh) 中确保它始终自动重置。
或者您可以确保使用less
、vim
或除cat
查看文件之外的任何其他选项。
要使less
行为类似cat
并在文件长度不足一页时自动退出,请运行less -FX
或 do export LESS=-FX
。
或者,如果您不想总是使用这些less
选项,请创建一个新别名,例如
alias c='less -FX'
答案2
VT100 仿真器中图形字符集被意外选择的最常见方法是接收字符Control-N,也称为移出。如果您捕获一个二进制文件,并且其中有一个字节的值为“\14”,则可能会导致终端仿真器转换为图形字符集。它在接收到Control-O字符、移入(或通过重置终端的控制序列)时被撤消。它独立于 bash 或可能在终端仿真器中运行的任何其他 shell。
对于在终端仿真器内运行的终端仿真器,语义可能有点复杂。例如,这是如何屏幕处理它:
当调用 screen 的终端的 termcap 条目中存在布尔“G0”功能时,screen 的终端仿真支持多种字符集。这允许应用程序使用 VT100 图形字符集或国家字符集等。支持 ISO 2022 中的以下控制功能:“锁定移位 G0”(“SI”)、“锁定移位 G1”(“SO”)、“锁定移位 G2”、“锁定移位 G3”、“单移位 G2”、和“单班G3”。创建或重置虚拟终端时,ASCII 字符集指定为“G0”到“G3”。当“G0”能力存在时,屏幕评估能力“S0”、“E0”和“C0”(如果存在)。 “S0”是终端用来启用和启动图形字符集的序列,而不是“SI”。 “E0”是“SO”的相应替代。 'C0' 给出在半图形模式期间使用的逐字符翻译字符串。