if句に対するプロンプトのカスタマイズの問題

if句に対するプロンプトのカスタマイズの問題

最近PS1を少し調整しています。コードは以下のように表示されます。

PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '

欠落している文字のソースは次のとおりです。素晴らしいフォント私の質問と機能assemble_promptには関係ありません。

私が経験している問題は、ターミナルウィンドウのサイズをプロンプトサイズ(約)に減らすとPS1が破損することです。これはPS1設定を無視し、PS1を$文字のみに設定するようです(スクリーンショットを参照)。入力を開始すると、カスタムプロンプトが上書きされます。

PS1クレイジー

前のコマンドが成功しなかった場合は、「失敗」文字を追加して問題の範囲をif句に絞り込みました。その部分を削除すると、すべてが期待どおりに機能します。

ifセクションを維持しながらウィンドウサイズが小さすぎるときにPS1リセットの問題を解決する方法はありますか?

rxvt-unicodePS:端末として使用していますが、他のすべての端末にはまだ問題があります(テスト済みxtermst)。

ベストアンサー1

\[...\]実際に文字を印刷しないことをBashに通知するために、端末制御コードを束ねることができます。そうしないと、シェルがプロンプトの幅を計算しようとすると混乱します。

したがって"\[\e[91m\]xxx\[\e[0m\]"

~から手動:

\[  Begin a sequence of non-printing characters. 
    This could be used to embed a terminal control sequence into the prompt.
\]  End a sequence of non-printing characters.

おすすめ記事