为什么有些(通常很长)命令在 bash & zsh 中出现乱码?

Jon*_*tan 10 bash zsh shell

很多时候,当我在 bash 或 zsh 中输入一个长命令时(这是我肯定见过的仅有的两个 shell),光标会扭曲到我输入的字符串中间的某个位置,谁能解释为什么会这样,如果可以做些什么呢?

我注意到,当我浏览 shell 的历史记录(使用箭头键)时,经常会发生这种情况,当我遇到一个很长的条目时,新的长条目会与之前的条目混淆,从而导致文本出现乱码。

我有一个短字符串的例子,我刚刚注意到:

历史包含:

mkdir sune1
mkdir sune2
Run Code Online (Sandbox Code Playgroud)

如果我导航到mkdir sune1,然后导航到,mkdir sune2我希望我的命令行是mkdir sune2(因为这是我现在导航到的) - 但我得到mkdir1sune2.

多年来我经常注意到这一点,但不要让它太困扰我,但我认为是时候改变了!那么,有什么想法吗?

Gor*_*son 9

您的提示字符串可能错误地转义了非打印字符。如果您的提示中有任何类似颜色更改的内容,您需要在终端转义序列周围放置\[\]周围,​​以便 bash 可以告诉它们不占用屏幕上的空间 - 否则它会错误地计算实际命令在屏幕上的位置,并更新它在错误的地方。请参阅TLDP 中的此部分。在 zsh 中,放置%{%}绕过转义序列。