我找到了一个很好的自定义我的.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
我遇到的问题是它无法正确处理文本包装(参见下面的屏幕截图)。任何人都可以提出任何问题的建议吗?它看起来根本不会调整用户键入的内容。
答案 0 :(得分:2)
CYAN
BROWN
NOCOLOR
vars的价值是什么?
你最可能忘记将它们包裹在\[
和\]
中
将它们标记为非打印字符。
如果您的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
如果设置,则在发出每个主要提示之前将该值作为命令执行。
并且还注意到,通过对流,资本变量名称保持由环境使用