bash PS1セットアップ


9

PS1を次のように構成しようとしています。

緑= "\ [\ e [32; 1m \]"
赤= "\ e [0; 31m"
Purple = "\ e [0; 35m"
STARTCOLOR = "\ [\ e [40m \]"
ENDCOLOR = "\ [\ e [0m \]"
export PS1 = "$ STARTCOLOR $ Green \ u @ $ Purple \ h $ Red \ w $ Green> $ ENDCOLOR"

そして、いくつか質問があります。

  • "[\ e [32; 1m]"と\ e [32; 1m "の違いは何ですか?それらは同じですか?
  • 'export PS1'コマンドを実行した後、それはうまくいきますが、20文字程度の入力を与えると、添付したとおりに文字が上書きされます。これの何が問題になっていますか?
  • STARTCOLOR(\ e [40m)/ ENDCOLOR(\ e [0m)の意味は何ですか?

http://a.imageshack.us/img8/606/resultqm.jpg

追加された

いくつかのテストの後、次の変更で問題を解決できる可能性があります。つまり、「\ e」形式は「\ [\ e」形式に置き換える必要があります。

Red = "\\ e [1; 31m"-機能していません
Red = "\ [\ e [1; 31m \]"-機能しています

回答:


12

プロンプトを設定するヘルパー関数があり、エスケープコード参照を探すのに時間をかけたくないので、すべてのテキストの色の値をコード化しました。

function set_prompt ( )
{
    # Prompt setup
    # ##################

    # Black            \e[0;30m
    # Blue             \e[0;34m
    # Green            \e[0;32m
    # Cyan             \e[0;36m
    # Red              \e[0;31m
    # Purple           \e[0;35m
    # Brown            \e[0;33m
    # Gray             \e[0;37m
    # Dark Gray        \e[1;30m
    # Light Blue       \e[1;34m
    # Light Green      \e[1;32m
    # Light Cyan       \e[1;36m
    # Light Red        \e[1;31m
    # Light Purple     \e[1;35m
    # Yellow           \e[1;33m
    # White            \e[1;37m

    local COLOR_DEFAULT='\[\e[0m\]'
    local COLOR_BLACK='\[\e[0;30m\]'
    local COLOR_BLUE='\[\e[0;34m\]'
    local COLOR_GREEN='\[\e[0;32m\]'
    local COLOR_CYAN='\[\e[0;36m\]'
    local COLOR_RED='\[\e[0;31m\]'
    local COLOR_PURPLE='\[\e[0;35m\]'
    local COLOR_BROWN='\[\e[0;33m\]'
    local COLOR_GRAY='\[\e[0;37m\]'
    local COLOR_DARK_GRAY='\[\e[1;30m\]'
    local COLOR_L_BLUE='\[\e[1;34m\]'
    local COLOR_L_GREEN='\[\e[1;32m\]'
    local COLOR_L_CYAN='\[\e[1;36m\]'
    local COLOR_L_RED='\[\e[1;31m\]'
    local COLOR_L_PURPLE='\[\e[1;35m\]'
    local COLOR_YELLOW='\[\e[1;33m\]'
    local COLOR_WHITE='\[\e[1;37m\]'

    local PS1_SET_TITLE='\[\e]0;\w\a\]'

    local PS1_SET_TIME="${COLOR_DEFAULT}\t"
    local PS1_SET_RET_CODE="${COLOR_L_RED}(\$?)"
    local PS1_SET_USER="${COLOR_L_GREEN}\u@\h"
    local PS1_SET_PWD="${COLOR_YELLOW}\w"

    local PS1_LN_1="${PS1_SET_TITLE}\n"
    local PS1_LN_2="${PS1_SET_TIME} ${PS1_SET_RET_CODE} "
    local PS1_LN_2="${PS1_LN_2}${PS1_SET_USER} ${PS1_SET_PWD} ${COLOR_DEFAULT}\n"

    echo "${PS1_LN_1}${PS1_LN_2}"
}

その後、次のことができます。

PS1=$( set_prompt )

# Use '#' for root shell
export PS1=${PS1}'$ '

unset -f set_prompt

VT100端末コードを説明するリンクは次のとおりです。http//www.termsys.demon.co.uk/vtansi.htm

\[-非印刷文字のシーケンスの開始-非印刷文字の
\]シーケンスの終了

  • "[\ e [32; 1m]"と\ e [32; 1m "の違いは何ですか?それらは同じですか?

同じではなく、それは\[\e[32;1m\]'. Without[] ` でなければなりません。シーケンスをコンソールに出力しようとします。

  • STARTCOLOR(\ e [40m)/ ENDCOLOR(\ e [0m)の意味は何ですか?

STARTCOLORは背景を黒に設定することを意味し、ENDCOLORはすべてのテキスト属性をリセットすることを意味します。


+1すごくいい!!! これを私のbashrcにコピーしてもかまいません:)
Eldelshell

@Ubersoldat。どういたしまして。
Alexander Pogrebnyak

1
\$ルート表示と非ルート表示を自動的に切り替えるために使用します。
追って通知があるまで一時停止。

9

bashマニュアルから:

\[    端末制御シーケンスをプロンプトに埋め込むために使用できる一連の非印刷文字を開始する非一連の非印刷文字を
\]    終了する

\[そして\]、端末に渡されません。彼らはbashに、それらの間の文字は印刷されないことを伝えます。それらがないと、bashはエスケープ文字(例:)に続くシーケンスが[32;1m画面上でスペースをとらないことを知ることができませんでした。

質問の一貫性があまりないことに注意してください(または、おそらくMarkdownの間違いです)。には、$PS1単なるブラケット(文字どおりに表示される)ではなく、文字どおりのバックスラッシュブラケットシーケンスが必要です。

で始まるエスケープシーケンス\eは、端末エミュレータによって解釈されます。それらはXtermの制御シーケンス(ctlseqs)文書に記載されています(他の端末エミュレーターはほとんど互換性がある傾向があります)。たとえば、\e[32;1mボールドとグリーンのフォアグラウンドに切り替えます。\e[40m背景色を黒に切り替えます。\e[0mデフォルトの属性を復元します。


3

最近のほとんどの端末エミュレータは、ANSIエスケープコードを使用して、ディスプレイのさまざまな側面を制御できます。

ほとんどのANSIコードは、2文字のコードESC- [で始まります。これは、エスケープ文字(ASCII 10進27)であり、その後に開き角かっこ文字が続きます。このシーケンスは、CSIまたは制御シーケンスイニシエーターとも呼ばれます。

エスケープ文字は直接入力できるものではないため(Escキーには他にも、多くの場合アプリケーション固有の用途があります)、bashはそれを参照するために '\ e'を使用します。

テキストの色を変更するには、ANSI Set Graphics Modeコマンドを使用します。

\e[<value>m

ここ<value>で、セミコロン(;)で区切られた値のリストを指定できます。通常、使用される値は1つだけですが、ボールド属性はカラー属性と組み合わせて使用​​すると便利です。

Alexander Pogrebnyakの回答にリストされている値を見ると、セミコロンの前の0または1が太字かどうかを選択しています。

\e[1m  # bold
\e[5m  # blink
\e[0m  # all attributes off

ここにコードの有用なリストがありますhttp://ascii-table.com/ansi-escape-sequences.php

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.