方法1、使用 -e 开启转义后用 \e 或 \033 输出 Esc 符号
语法:
echo -e "\e[样式;前景色代号;背景色代号m需要设置颜色的字符串\e[0m" echo -e "\033[样式;前景色代号;背景色代号m需要置颜色的字符串\e[0m"
例子:
echo -e "\e[0;31m ALERT \e[0m" #透明底红字(终端默认的背景色) echo -e "\e[0;31;1m ALERT \e[0m" #透明底红字 + 高亮效果 echo -e "\e[47;31m ALERT \e[0m" #白底红字
方法2、直接使用 Ctrl+v,Esc 输入 Esc 符号、不使用转义,Esc的视觉效果为 ^[
示例:
echo "^[[0;31m ALERT ^[[0m" #注:“^[”是一个字符不是2个,输入方法为按Ctrl+v后再按Esc键
颜色代号:
颜色:0-黑,1-红、2-绿、3-黄、4-青、5-些、6-橙、7-灰白,+30表示前景色,+40表示背景色
样式:0-关闭,1-高亮,4-下划线,5-闪烁,7反白,8不可见
下文有脚本生成的颜色表
更多颜色搭配:
#/bin/bash for STYLE in 0 1 2 3 4 5 6 7; do for FG in 30 31 32 33 34 35 36 37; do for BG in 40 41 42 43 44 45 46 47; do CTRL="\033[${STYLE};${FG};${BG}m" echo -en "${CTRL} " echo -n "${STYLE};${FG};${BG}" echo -en " \033[0m " done echo done echo done # Reset echo -e "\033[0m"
执行结果见下图(颜色表):
用法:\e[?;??;??m需要设置颜色的文字\e[0m,“?;??;??”见下图:
修改窗口标题
“[\u@\h \W]$”用来修改命令行提示符 prompt,如果想修改窗口标题可以使用:
\e]2;标题名称\a \033]2;标题名称\007
“标题名称”也可以使用“[\u@\h \W]”
我的$PS1
# Git for prompt # https://github.com/git/git/blob/35f6318d44379452d8d33e880d8df0267b4a0cd0/contrib/completion/git-prompt.sh export GIT_PS1_HIDE_IF_PWD_IGNORED=1 export GIT_PS1_SHOWUNTRACKEDFILES=1 export GIT_PS1_SHOWDIRTYSTATE=1 export GIT_PS1_SHOWSTASHSTATE=1 export GIT_PS1_SHOWCOLORHINTS=1 export GIT_PS1_SHOWUPSTREAM="auto" source ~/.bin/.git-prompt.sh # 短路径 getShortURL() { URL=$PWD URL=${URL/#$HOME/\~} TITLE=$URL URL_LEN=${#URL} BASE_NAME=$(basename $PWD) BASE_NAME_LEN=${#BASE_NAME} MAX_TITLE_LEN=$(($BASE_NAME_LEN + 10)) if [ $URL_LEN -gt $MAX_TITLE_LEN ]; then TITLE='...'${URL:0-$MAX_TITLE_LEN} fi echo $TITLE return 0 } # Prompt PS1='' PS1=$PS1'\[\e]2;$(getShortURL)\a\]' PS1=$PS1'\[\e[1;32m\]\u\[\e[0m\]:\[\e[1;34m\]\W\[\e[0m\]' PS1=$PS1'\[\e[1;31m\]$(__git_ps1 " %s")\[\e[0m\]' PS1=$PS1' \$ '
注意
所有非打印参数需要用“\[“和”\]”括起来,不然会占用字符位置,比如你显示的prompt是“[root@laptop ~] $”时,如果没有用“\[“和”\]”括起来,你会发现是可以退格往前删除字符的,比如会删除成“[root@lapt”,如果你输入了ls命令就会变成“[root@laptls”。
窗口标题要整个包起来,包括标题里边的内容也要包起来,因为标题整个都不占用 prompt 的字符数。
\[ 应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash 能够正确计算自动换行。
\] 应该出现在非打印字符序列之后。
所以最终的PS1要写成这样:
PS1='\[\e[1;32m\]\u\[\e[0m\]:\[\e[1;34m\]\W\[\e[0m\]'
不能是:
PS1='\e[1;32m\u\e[0m:\e[1;34m\W\e[0m'