web-dev-qa-db-ja.com

Bash PS1のカスタマイズされたプロンプトで長い行が重なる

サーバー名、時間、ユーザー名、その他の便利な変数を使用して、空想の2行PS1 bashプロンプトを構成しました。

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"

enter image description here

完全なGithubソース ここ

問題は、長い行が自分自身の周りに巻き付けられることが多いことです。つまり、新しい行が前の行と重なることを意味します。

問題には一貫性がありません。一部の行は正しくラップされ、一部はそうではありません。

これを修正する方法はありますか?

13
Adam Matan

Bashプロンプト用の私の2行のPS1は次のとおりです。

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]

だからここに私がやったことがあります。これが私の色だった場合:

\e[1;32m

私はそれを次のように変更しました:

\[\e[1;32m\]

本質的には、次のもので囲む必要があります。

\[$mycolor\]

これを確認してください answer

15
varunyellina

このソリューション オンラインが見つかりました。これは、色変数の閉じ括弧を示唆しています。

これを変更:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green

に:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green

変更をコミット -期待どおりに動作することを願っています。

7
Adam Matan

Bash PS1での長い行の重複の問題に対する私の推奨される解決策は、PS1プロンプト行の最後に\nを持つことです。

例えば.

enter image description here

他のすべてのもの-時間、ユーザー、ホスト、ディレクトリ、gitブランチ(!)が必要な場合は、これを使用できます(macまたはlinux):

https://unix.stackexchange.com/a/124012/1004

0
Michael Durrant