我有一个Mac App(CodeRunner),它在登录模式下执行脚本并在窗口中显示输出。 在错误情况下,它返回带有转义字符的代码,使输出难以读取。
有没有办法处理颜色代码?是否有过滤器来删除颜色代码?
答案 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 #
。