捕获二进制后,哈希符号 (#) 变为英镑符号 (£)

捕获二进制后,哈希符号 (#) 变为英镑符号 (£)

这就是我的 bash 提示符过去的样子。

旧的 bash 提示符

然后我做了一些可能不太聪明的事情,我做了cat /bin/bash。现在我的 bash 提示符看起来像这样,用英镑符号 (£) 而不是井号 (#)。它甚至会影响文件内的哈希符号,请参见此处:

文件中的井号符号

知道如何恢复这个吗?

编辑:这个问题不是问“如何改变我的bash提示符?”,而是问“我的bash提示符自己改变了,我怎样才能恢复它?”

完全的.bashrc对于那些有兴趣的人。

答案1

终端接受并执行一堆不同的字符序列作为控制命令。例如,所有光标移动都是使用这些来完成的。有些代码会进行永久性更改,例如设置颜色或告诉终端使用备用字符集。可执行文件和其他二进制文件很可能包含表示这些命令的字节,因此将二进制文件转储到终端可能会产生令人讨厌的副作用。参见例如这里对于一些控制代码。

其历史背景是,最初,终端相当带屏幕和键盘的哑设备,并且它们通过串行端口连接到实际的计算机。在此之前,它们是带有键盘的打印机。没有太多协议可以将数据字节与命令字节分开,因此命令被“内联”发送给终端。 (或者更确切地说,转义码和控制字符就是协议。)人们可能会认为,如果今天设计该系统,数据和命令之间将会有更清晰的分离。

您可以使用以下命令,而不是仅仅关闭终端窗口或终止模拟器reset命令,它发送一个类似的命令(或多个)将终端重置回正常的默认值。

我不知道到底是什么会导致哈希值发生变化。 (但是@Random832确实如此,看看他们的答案.)我更熟悉“替代字符集”,它可以将所有字符更改为画线字形。即使发生这种情况,键盘输入通常不会发生变化,因此resetEnter即使字符显示为垃圾或根本不显示,写入仍然有效。 (与你的提示变成一堆行相比,你只得到了很小的效果。)

答案2

作为记录,回答为什么会发生这种情况以及如何在不关闭终端的情况下修复它(如果reset失败):

许多终端支持,作为一个功能VT220他们正在模拟的终端,一些国家替换字符集基于ISO 646ISO 2022。特别是,由于某种原因,即使不支持其他字符集,它们也很常见地支持英国字符集,其中英镑货币符号的位置与 ASCII 数字符号的位置相同。

因此,当您将二进制文件打印到终端时,它会出于某种巧合将序列ESC ( A[或者可能是ESC ) Aand ^N]输出到终端。这可以通过打印将其设置为正常状态的序列来手动撤消:

printf '\e(B\e)0\x0f'

答案3

关闭终端并打开一个新终端。

答案4

stty sane似乎也解决reset了这个问题。

相关内容