0

追加情報を表示し、色を強調表示するプロンプトを表示するために、.bashrcを適切にカスタマイズできることがわかりました。これが私が持っているものです:

# ----- Define a few Colors
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'
LIGHTGRAY='\e[0;37m'
DARKGRAY='\e[1;30m'
LIGHTBLUE='\e[1;34m'
LIGHTGREEN='\e[1;32m'
LIGHTCYAN='\e[1;36m'
LIGHTRED='\e[1;31m'
LIGHTPURPLE='\e[1;35m'
YELLOW='\e[1;33m'
WHITE='\e[1;37m'

function __setprompt {
  local SSH_IP=`echo $SSH_CLIENT | awk '{ print $1 }'`
  local SSH2_IP=`echo $SSH2_CLIENT | awk '{ print $1 }'`
  if [ $SSH2_IP ] || [ $SSH_IP ] ; then
    local SSH_FLAG="@\h"
  fi
  PS1="$CYAN[\u$SSH_FLAG:$BROWN\w$CYAN]\\$ $NOCOLOR"
  PS2="$CYAN>$NOCOLOR "
  PS4='$CYAN+$NOCOLOR '
}
__setprompt

私が遭遇している問題は、テキストの折り返しを正しく処理しないことです(下のスクリーンショットを参照)。誰かが問題が何であるかについて何かアドバイスを提供できますか?ユーザーが入力した内容はまったく調整されていないようです。

コマンドプロンプトの例

4

1 に答える 1

2

CYAN BROWN NOCOLORvarsの値は何ですか?おそらく、それらを非印刷文字 としてマークするために、とで
ラップするのを忘れていました。\[\]

あなたCYAN

CYAN="\e[0;36m"

あなたはそれを包む必要が\[あり\]ます

CYAN="\[\e[0;36m\]"

それ以外の場合は、変数自体をプロンプト変数でラップします。

PS2="\[$CYAN\]>\[$NOCOLOR\] "

ここのコメントを参照してください:

function __setprompt {
  local SSH_IP="${SSH_CLIENT%% *}"      # no need for echo/awk/sed
  local SSH2_IP="${SSH2_CLIENT%% *}"    # use parameter expansion instead
  if [[ -n "$SSH2_IP" || -n "$SSH_IP" ]]; then  # bash uses double brakets
    local SSH_FLAG="@\h"                        # and the OR operator works inside
  fi
  PS1="\[$CYAN\][\u$SSH_FLAG:\[$BROWN\]\w\[$CYAN\]]\\$ \[$NOCOLOR\]"  # dont mess with [ and ]
  PS2="\[$CYAN\]>\[$NOCOLOR\] "                                       # only wrap color vars in \[ and \]
  PS4="\[$CYAN\]+\[$NOCOLOR\] "                 # single quotes will not expand $vars
}
__setprompt

また、PROMPT_COMMAND変数を見てください、

PROMPT_COMMAND
設定されている場合、値は各プライマリプロンプトを発行する前にコマンドとして実行されます。

また、コンビネーションによって、資本変数名は環境によって使用され続けることに注意してください

于 2012-06-06T13:06:37.020 に答える