最後のコマンド出力が改行で終わらないと、ターミナル履歴が中断または中断されます(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~ $

2番目の「上」矢印キーの次:

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

実際

(これは私自身の$ PS1に残ります~ $。)(最初の2つのステップは予想通りです)

「下」矢印キー 次:

~ $ echo -n hello
hell

2番目の「上」矢印キーの次:

~ $ echo -n hello
hellecho -n hello

多様性

  • 別の$PS1値を使用してください。
  • エコーに異なる長さの文字列を使用します。
  • 歴史を追跡してみてください。私にとって、特定の歴史的価値は他の価値とは異なる影響を与えます。

私の端末

使っています

Konsole バージョン 21.12.3

ところで、以前に他のターミナルでもこの​​ようなことが起きているのを見たようです。 KDE "Konsole"がこの動作に責任があるかどうかはわかりません。

追加情報

(下記のコメントへの回答)

もちろんいいえユーザー「ルート」に発生しました!

最初は私のユーザーとユーザーの違いを確認しましたroot。しかし、これは$PS1設定の違いによるものであることがわかりました。この値を'~ \$'、またはで正規化した後、'${debian_chroot:+($debian_chroot)}\[\033[01;34m\]\w\[\033[00m\] \$ 'ルートと自分自身に対して同じ動作が表示されます。

これは完全に別々の設定を持つDockerコンテナ内のbashでも発生します。

リンク

ちなみにここで問題を開きました。https://bugs.kde.org/show_bug.cgi?id=464384

答え1

これは、プロンプトが現在の行の一番左の位置から始まり、下を押すと位置5に移動し、行の最後まで消去されると考えるbash(実際にはreadline)です。

下向き矢印を押すと、bashは次のものを端末に送信します。

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

これは、現在の行の左端の位置に移動されたキャリッジリターン文字です。 4つ(プロンプト長)のCUF(カーソル前進)制御シーケンスと1つのEL(Erase Line)制御シーケンス、パラメータ0(デフォルト)は現在のカーソルを位置から消去します。行末まで。

関連情報