すべてまたはほとんどの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(デフォルト)は現在のカーソルを位置から消去します。行末まで。