我正在尝试按如下方式配置 PS1。
绿色="\[\e[32;1m\]" 红色="\e[0;31m" 紫色="\e[0;35m" STARTCOLOR="\[\e[40m\]" ENDCOLOR="\[\e[0m\]" 导出 PS1="$STARTCOLOR$Green\u@$Purple\h $Red\w$Green>$ENDCOLOR"
我有一些问题。
http://a.imageshack.us/img8/606/resultqm.jpg
经过一些测试,我得到以下更改可以解决问题。即,“\e”格式应替换为“\[\e”格式。
Red="\\e[1;31m" -- 不工作 Red="\[\e[1;31m\]" -- 工作
Ale*_*yak 13
我有一个辅助函数来设置提示,因为我不想花更多的时间来寻找转义代码引用,我已经将所有文本颜色值编码到其中。
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}"
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
PS1=$( set_prompt )
# Use '#' for root shell
export PS1=${PS1}'$ '
unset -f set_prompt
Run Code Online (Sandbox Code Playgroud)
这是解释 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 表示重置所有文本属性,意思是“给我默认的控制台颜色”
从 bash 手册:
\[
开始一系列非打印字符,可用于将终端控制序列嵌入到提示中
\]
end 一系列非打印字符
\[
并且\]
不会传递到终端。他们告诉 bash 他们之间的字符不会被打印出来。没有它们,bash 无法知道转义字符(例如[32;1m
)后面的序列不占用屏幕上的任何空间,这解释了为什么当您将它们排除在外时它没有正确计算提示的长度。
请注意,您的问题不是很一致(或者可能只是 Markdown 的错误);您需要在 中有一个文字反斜杠括号序列$PS1
,而不仅仅是一个括号(将按字面显示)。
以 开头的转义序列\e
由终端模拟器解释。它们记录在Xterm 控制序列 (ctlseqs)文档中(其他终端仿真器通常是兼容的)。例如,\e[32;1m
切换到粗体和绿色前景;\e[40m
将背景颜色切换为黑色;\e[0m
恢复默认属性。