bash PS1変数の設定

bash PS1変数の設定

PS1次のように設定しようとします。

Green="\[\e[32;1m\]"
Red="\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)

付録

いくつかのテストを行った後、問題を解決するために次の変更がありました。つまり、\e形式を形式に置き換える必要があります\\[\e

Red="\\e[1;31m"    #-- not working
Red="\[\e[1;31m\]" #-- working

ベストアンサー1

ヒントを設定するヘルパー関数があり、エスケープコード参照を見つけるのに時間を費やしたくないので、すべてのテキストカラー値をここにエンコードします。

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はすべてのテキスト属性をリセットすることを意味します。つまり、「デフォルトコンソールの色を指定してください」という意味です。

おすすめ記事