使用颜色代码处理bash输出

时间:2015-09-27 01:19:10

标签: bash colors

我有一个Mac App(CodeRunner),它在登录模式下执行脚本并在窗口中显示输出。 在错误情况下,它返回带有转义字符的代码,使输出难以读取。

enter image description here

有没有办法处理颜色代码?是否有过滤器来删除颜色代码?

2 个答案:

答案 0 :(得分:1)

在Mac OS X中,我使用了stderred库。

#export DYLD_INSERT_LIBRARIES="/LOCATION_OF_THE_LIB/libstderred.dylib${DYLD_INSERT_LIBRARIES:+:$DYLD_INSERT_LIBRARIES}"

删除此库设置会显示没有代码的字符串。

答案 1 :(得分:-1)

如果我理解你的问题,在bash(或任何支持它们的终端)中控制颜色的最简单方法是使用ANSI转义序列。例如:

#!/bin/bash

blue='\e[0;34m'         # ${blue}
green='\e[0;32m'        # ${green}
nc='\e[0m'              # ${nc} (no color - disables previous color selection)

printf "${blue}This text is blue, ${green}this is green${nc}\n"

exit 0

网上提供的ANSI序列有很多完整的参考资料,但对于基本颜色,以下内容通常就足够了:

black='\e[0;30m'        # ${black}
blue='\e[0;34m'         # ${blue}
green='\e[0;32m'        # ${green}
cyan='\e[0;36m'         # ${cyan}
red='\e[0;31m'          # ${red}
purple='\e[0;35m'       # ${purple}
brown='\e[0;33m'        # ${brown}
lightgray='\e[0;37m'    # ${lightgray}
darkgray='\e[1;30m'     # ${darkgray}
lightblue='\e[1;34m'    # ${lightblue}
lightgreen='\e[1;32m'   # ${lightgreen}
lightcyan='\e[1;36m'    # ${lightcyan}
lightred='\e[1;31m'     # ${lightred}
lightpurple='\e[1;35m'  # ${lightpurple}
yellow='\e[1;33m'       # ${yellow}
white='\e[1;37m'        # ${white}
nc='\e[0m'              # ${nc} (no color - disables previous color selection)

注意:始终将颜色重置为带有${nc}'\e[0m')的字符串末尾的默认值,以防止在脚本完成后继续使用颜色。最后,如果使用echo,则必须使用echo -e来处理ANSI代码。

注2:,因为您看到的是代码而不是颜色,您有几种可能性(1)您使用echo而没有-e选项以允许正确的解释代码(或类似的东西);或者(2)您正在使用的终端缺乏色彩能力(尽管这是值得怀疑的,因为几乎所有现代终端都是基于VT的,可以使用默认的颜色处理)。

根据以下评论的建议,您还可以使用tput设置颜色(背景为setab #,前景为setaf #