如果最后一个命令输出不以换行符结尾,则终端历史记录向上/向下中断(KDE Konsole)

如果最后一个命令输出不以换行符结尾,则终端历史记录向上/向下中断(KDE Konsole)

所有或大多数 Linux 终端都有一个奇怪的行为,这困扰了我很长时间。我不确定这是一个错误还是有意为之,或者是配置问题。所以我先在这里问一下。

重现步骤

  • 打开终端。
  • 可选:运行export PS1='~ \$', 来标准化此设置。请随意尝试此设置。
  • 跑步echo -n hello
  • 使用“向上”键获取上一个命令。
  • 使用“向下”箭头键返回到空提示。
  • 再次使用“向上”。

预期的

(这是我自己的 $PS1 留下的~ $。)

运行后echo -n hello

~ $ echo -n hello
hello~ $ 

“向上”箭头键后:

~ $ echo -n hello
hello~ $ echo -n hello

“向下”箭头键后:

~ $ echo -n hello
hello~ $

第二个“向上”箭头键后:

~ $ echo -n hello
hello~ $ echo -n hello

实际的

(这是我自己的 $PS1 留下的~ $。)(前两个步骤如“预期”中所示)

“向下”箭头键后:

~ $ echo -n hello
hell

第二个“向上”箭头键后:

~ $ echo -n hello
hellecho -n hello

变化

  • 使用不同的 $PS1 值。
  • 在 echo 中使用不同长度的字符串。
  • 追溯历史。对我来说,某些历史价值观的影响与其他价值观不同。

我的终端

我在用

Konsole 版本 21.12.3

但我想我过去也在其他终端上看到过这种情况。我不知道 KDE“Konsole”是否对这种行为负责。

附加信息

(回应下面的评论)

确实如此不是发生在用户“root”身上!

最初我看到了我自己的用户和用户之间的区别root。但事实证明,这只是由于$PS1设置的差异造成的。将此值标准化为'~ \$', 或 后'${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\w\[\033[00m\] \$ ',我现在看到 root 和我自己有相同的行为。

它也发生在 docker 容器内的 bash 中,该容器具有完全独立的设置。

链接

作为记录,我在这里开了一个问题,https://bugs.kde.org/show_bug.cgi?id=464384

答案1

这只是 bash (实际上是 readline)认为提示符从当前行的最左边位置开始,然后当您按下 Down 时,只是移动到位置 5,并清除到行尾。

当您按下向下键时,bash 会将以下内容发送到终端:

\r\33[C\33[C\33[C\33[C\33[K

这是一个回车符移动到当前行的最左边位置,四个(提示符的长度)CUF(光标前进)控制序列和一个 EL(擦除行)控制序列,参数 0(默认)清除从当前光标位置到行尾。

相关内容