首页 » 工作 » 方法 » 正文

彩色化终端输出显示

发布者:站点默认
2014/12/23 浏览数(1,739) 分类:方法 彩色化终端输出显示已关闭评论

方法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"  #白底红字

terminal_demo

方法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,“?;??;??”见下图:

terminal_demo_2

修改窗口标题

“[\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'
点击返回顶部
  1. 留言
  2. 联系方式