重複の可能性:
履歴検索で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-date
のdate
出力を印刷します。なぜこれが起こり、副作用なしに必要なヒントを得ることができるのですか?
ベストアンサー1
何が起こっているのか、Bashはプロンプトに印刷する文字数のために混乱しています。コマンド履歴などに対するカーソルの位置を正しく指定するために、カーソル位置決めシーケンスを端末に送信します。プロンプトを印刷したら、カーソルが実際にどこにあるのかを明確に知ることができるはずです。
プロンプトを次のように設定してみてください。
PS1='\[\e[35m\][\W]:\[\e[0m\] '
これで期待どおりに機能します。
\[
ペアは\]
Bashに、それらの間にあるものは印刷されないエスケープシーケンスであり、実際にカーソルを前に移動しないことを伝えます。その後、コマンド履歴を探索しながらカーソル位置を正しく推測し、正しい置換を実行します。
この情報は情報ノードにあります。(bash)Printing a Prompt
。
編集する:最新バージョンのbashでは、次のように変更されました。(bash)Controlling the Prompt
。