这就是我的 bash 提示过去的样子。
然后我做了一些可能不太聪明的事情,我做到了cat /bin/bash
。现在我的 bash 提示看起来像这样,用英镑符号 (£) 而不是哈希符号 (#)。它甚至会影响文件中的哈希符号,请参见此处:
任何想法如何恢复这个?
编辑:此问题不问“如何更改我的 bash 提示?”,而是“我的 bash 提示自行更改,我该如何恢复?”
ilk*_*chu 106
终端接受并执行一堆不同的字符序列作为控制命令。例如,所有光标移动都是使用这些完成的。一些代码进行永久性更改,例如设置颜色,或告诉终端使用备用字符集。可执行文件和其他二进制文件很可能包含代表这些命令的字节,因此将二进制文件转储到终端可能会产生令人讨厌的副作用。一些控制代码参见例如这里。
其历史背景是,最初终端是带有屏幕和键盘的相当笨拙的设备,它们通过串行端口连接到实际的计算机。在此之前,它们是带键盘的打印机。没有太多协议可以将数据字节与命令字节分开,因此命令被“内联”发送给终端。(或者更确切地说,转义码和控制字符是协议。)人们可能会假设,如果系统是在今天设计的,那么数据和命令之间会有更清晰的分离。
您可以使用reset
command,而不是仅仅关闭终端窗口或终止模拟器,它会发送一个(或多个)类似的命令来将终端重置为正常的默认值。
我不知道究竟是什么会导致哈希改变。(但@Random832 确实如此,请参阅他们的答案。)我更熟悉“替代字符集”,它可以将所有字符更改为画线字形。即使发生这种情况,来自键盘的输入通常会保持不变,因此reset
Enter即使字符显示为垃圾或根本不显示,书写仍然有效。(与你的提示变成一堆行相比,你只得到了很小的影响。)
Ran*_*832 80
作为记录,要回答为什么会发生这种情况以及如何在不关闭终端(如果reset
失败)的情况下修复它:
许多终端支持,作为他们模拟的VT220终端的一个特性,基于ISO 646和ISO 2022的许多国家替换字符集。特别是,出于某种原因,即使不支持其他人,他们也支持英国字符集是很常见的,其中英镑货币符号与 ASCII 具有数字符号的位置相同。
因此,当您将二进制文件打印到终端时,它出于某种巧合将序列ESC ( A
[或者可能ESC ) A
和^N
]输出到终端。这可以通过打印将其设置为正常状态的序列来手动撤消:
printf '\e(B\e)0\x0f'
Run Code Online (Sandbox Code Playgroud)
小智 29
关闭终端并打开一个新终端。
小智 7
无需关闭并重新打开或重置您的终端!虽然重置会起作用,但这不是正确的方法!
您只需要清除/擦除终端回滚缓冲区。为此,只需使用以下命令:
$ echo -ne '\0033\0143'
Run Code Online (Sandbox Code Playgroud)