このPS1値が予期しない動作を引き起こすのはなぜですか? [コピー]

このPS1値が予期しない動作を引き起こすのはなぜですか? [コピー]

重複の可能性:
履歴検索でbashプロンプトに問題が発生するのはなぜですか?

PS1変数を.bashrc次のように設定しました。

PS1='\e[35m[\W]:\e[0m '

cwd意図したとおりに実行されますが([]内部プロンプトと以前に表示されたプロンプトの色の変更:)、コマンド履歴を検索するときに繰り返すコマンドの一部がプロンプトに添付されることがあります。たとえば、

[~]: echo "something"
something
[~]: date
Sun Nov 18 17:07:54 PST 2012
[~]: sudo apt-get install vim
...

今コマンドを返したいとし、echo "something"を押して

[~]: sudo apt-get install vim

もう一度押すとこれが起こります

[~]: sudo apt-date

また起きて

[~]: sudo apt-echo "something"

バックスペースを押してコマンドラインのすべての内容を削除すると、次まですべて削除されます。

[~]: sudo apt-

コマンドには影響しません。たとえば、その行は依然としてなど[~]: sudo apt-datedate出力を印刷します。なぜこれが起こり、副作用なしに必要なヒントを得ることができるのですか?

ベストアンサー1

何が起こっているのか、Bashはプロンプトに印刷する文字数のために混乱しています。コマンド履歴などに対するカーソルの位置を正しく指定するために、カーソル位置決めシーケンスを端末に送信します。プロンプトを印刷したら、カーソルが実際にどこにあるのかを明確に知ることができるはずです。

プロンプトを次のように設定してみてください。

PS1='\[\e[35m\][\W]:\[\e[0m\] '

これで期待どおりに機能します。

\[ペアは\]Bashに、それらの間にあるものは印刷されないエスケープシーケンスであり、実際にカーソルを前に移動しないことを伝えます。その後、コマンド履歴を探索しながらカーソル位置を正しく推測し、正しい置換を実行します。

この情報は情報ノードにあります。(bash)Printing a Prompt

編集する:最新バージョンのbashでは、次のように変更されました。(bash)Controlling the Prompt

おすすめ記事