最近、変数を使ってBashプロンプトを変更して$PS1
色を付けることができました。私のファイルにあります.bashrc
:
PS1="\\[\e[0;32m[\h::\W] >>\e[m "
何かを入力し、それをクリアするためにバックスペースを実行する必要があると、プロンプト全体が消えます。 Enterを押すと新しいものが表示されます。
見ているこの質問は同じ問題についてです。閉じ括弧が欠けているようです。しかし、どこに行くのかわかりません。
答え1
最初はバックスラッシュが二重引用符内でそれ自体を離れると思いましたが、それは問題でした。しかし、もう一度考えてみると、"\\["
これは'\['
真実ではありません。そう動作します。
しかし、実際の問題は、readline
どのくらいの文字が画面に描画され、どのくらいの文字が端末の脱出で傍受されるかを知らないことです。実際にその可能性が大きい。いいえプロンプトはデフォルトで二重引用符で囲まれた文字列で構成されているため、プロンプトはすでに印刷されています。
したがって、私がコメントで指摘したように、シーケンスをオフにする必要があります。この\[
メソッドは、プロンプトで印刷されないエスケープシーケンスを開始します。これによりreadline
、画面に描画される文字数が追跡されます。また、次のように終了する必要があります。
PS1='\[non-printing terminal escapes here\]'
man bash 2>/dev/null | grep '^ *\\\[' -A5
\[ begin a sequence of non-printing
characters, which could be used to
embed a terminal control sequence
into the prompt
\] end a sequence of non-printing char‐
acters