15

やや長めの bash プロンプトを使用していることは認めます。

--(username)-(Wed April 01|12:00:00)--(~ $

最近、前のコマンドからの終了値に応じて、成功した場合は () の内部要素が緑になり、失敗した場合は赤になるように変更するという素晴らしいアイデアが得られました。私はそれをほとんどの部分で機能させました(いくつかの奇妙な終了ステータスは色を別のものに変えますが、私はそれで問題ありません)が、複数行のコマンドを入力して端末をスクロールさせると、プロンプトが消える!色がないときにプロンプ​​トが正常に機能したので、色のエスケープ、特に閉じていない [ に関連していると推測していますが、特定できません。

#.profile
export PS1='--(\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m \$ '

前もって感謝します!

4

3 に答える 3

42

これで問題が解決するようです。

これは私にとってはうまくいくようです*

export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ '

*まあ、本当にexport PS1='\u@\h:\w\$ '私のために働く

リンクされた投稿を引用すると、答えはPS1宣言のすべてのカラーシーケンスの周りに\[と\]を追加することにあります。

PS1に次の値を付ける前は:

'\ e [0; 34m \ h:\ w [!] \ $ \ e [0m'

これは私に次の形の素敵な青いプロンプトを与えました

hostname:working-directory[コマンド番号]$

しかし、私はあなたがしたのと同じ行折り返しの問題を抱えていました。修正は、ANSIエスケープの周りに\ [と\]を挿入して、シェルがそれらを行の折り返しの計算に含めないようにすることでした。これにより、PS1の値は次のようになります。

'\ [\ e [0; 34m \] \ h:\ w [!] \ $ \ [\ e [m \]'

于 2009-04-01T18:45:48.257 に答える
6

http://mywiki.wooledge.org/BashFAQ/053 -- 色付きの派手なプロンプトが表示されましたが、bash は端末の幅を認識していないようです。行が誤って折り返されます。

ところで; ご参考までに; これが私のPS1ものです: (ソース: lyndir.com )代替テキスト

\[$reset$bold$green\]\u@\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\]

$parametersよりきれいにするためにすべてのカラー コードをどのように配置したかに注目しくださいtput。見る:

http://mywiki.wooledge.org/BashFAQ/037 -- テキストをさまざまな色で印刷するにはどうすればよいですか?

と呼ばれるmy~/.bashrc (および私が作成したすべてのスクリプト) によって供給されるユーティリティ スクリプトで色パラメーターを宣言しますbashlib

最後に; PS1あなたの定義を入れて~/.bashrcくださいexportPS1シェルから生成するすべてのプロセスの環境に定義を追加する必要がある理由はまったくありません。

于 2009-04-01T19:21:46.187 に答える
1

エスケープの周りの開始ブラケットと終了ブラケットが欠落しているようです(最初の'\e'の前と最後の'm'の後):

PS1='--(\[\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m\] \$ '

前述のように、PS1変数をエクスポートする必要はありません。シェルだけがそれを見る必要があります。

于 2009-04-03T15:55:03.400 に答える