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


13

PS1サーバー名、時間、ユーザー名、その他の便利な変数を使用して、空想的な2行の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\]"

ここに画像の説明を入力してください

Githubの完全なソースはこちら

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

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

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

回答:


16

これは、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\]

この回答をご覧ください


+1ありがとう。奇妙なことに、Macでは動作しないようです。
アダムマタン

あなたは命の恩人です!Macに関しては、Adam ..列数が原因である可能性が最も高いです。「これは私のプロンプト:」のような文字列のみにプロンプ​​トを設定してみて、問題が解決するかどうかを確認してください。その場合、端末の列設定が広すぎるか狭すぎます。
アレックスサマーズ

7

この解決策をオンラインで見つけたところ、色変数の閉じ括弧が提案されました:

これを変える:

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

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


1
これが何を達成するのかわからない。スペースを使用しないもの(ansi-escapes)をラップする必要がある\[ \]ため、すべてのansi-escapeの色を\]で終わらせることはできません\[。印刷できない文字を入れるときは、それらをラップするだけです\[ \](例:)PS1='\[\e[32;1m\] green prompt \[\e[0m\] $'
dylnmc

確かに!開口部\ [がないと、これはLinuxユーザーにプロンプ​​トを押し付けます。たぶんOSXでは違うのでしょうか?おかしいですね。\ [と\ e [は、Linuxでは2つの異なるものとして解釈されます。1つ目は、後続のシーケンスが印刷不能であることをbashに示し、プロンプトの表示文字の一部としてカウントしないことを示します。\ e [は、ANSIカラースキームを開始するエスケープブラケットです。
アレックスサマーズ

0

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

例えば

ここに画像の説明を入力してください

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

/unix//a/124012/10043


gitブランチにはを使用する必要がありますif [[ $(git rev-parse --is-inside-git-dir 2> /dev/null) ]]; then branch="$( git symbolic-ref --short -q HEAD 2> /dev/null )"; fi。これは、gitをスクリプトに入れて、以前読んだものからブランチ名を評価する際の標準です。
dylnmc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.