バックスペースは Bash プロンプトを削除します。

バックスペースは Bash プロンプトを削除します。

最近、変数を使って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

おすすめ記事