2015-09-27 31 views
0

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

enter image description here

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

+0

控制字符(转义)仍然在输出中或被某些东西剥离了吗? –

+0

@Etan Reisner:他们都在那里,附加的图片是从输出窗口捕获的屏幕。 – prosseek

+0

颜色代码是'\ E [31m',其中'\ E'是一个转义符。该输出显示字符串的非转义部分。我假设逃跑在那里,但他们可能已经不在这一点。无论程序如何生成该输出,都可能需要对其提交一个错误信息,以便在不输出到终端时不输出颜色代码。 –

回答

0

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

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

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

-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 #)设置颜色。

+1

他的输出已经有了转义码(或者是其中的一部分)。他希望他们能够正确解释或从输出中删除。 – chepner

+1

建议使用'tput'来确定当前终端的正确代码可能是一个好主意。 –