PS1の問題、CLIの混乱


16

簡単なPS1割り当てを行いました

PS1="\e[0;31m[\W]\$ \e[m "

私がしたかったのは、プロンプトの色を変更し、相対パスのみを表示することでした。ただし、これはCLIを台無しにします。たとえば、it を使用して履歴を閲覧すると、表示がトリミングされて重なります。長いコマンドを入力すると、カーソルは画面の先頭に移動し、プロンプト表示自体と重なります。私は何を間違えましたか?

回答:


30

それは、bashがプロンプトがそれよりも長いと考えるからです。\e[0;31mたとえば、エスケープシーケンスはターミナルに吸い込まれ、次のテキストが赤に変わりますが、bashはそれを知りません。したがって、その文字列はプロンプトの長さでカウントされないようにbashに指示する必要があります\[ \]。また、ターミナルエスケープシーケンスをハードコーディングする代わりにtputを使用することをお勧めします。

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

詳細については、BashFAQ 53およびターミナルコード(ANSI / VT100)の概要を参照してください。


1
あなたの完璧な説明をありがとう、私はこの問題を数回経験しましたが、問題がどこにあったのか決してわかりません。
ベトリスタ

+1、ここも同じ。このソリューションを盲目的にテストしても機能しない場合は、関数内の色をエスケープするためのBashFAQリンクで説明されている別の構文があることをここで言及する価値があります\001 \002
スティーブンニエジエルスキ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.