我有一个Mac App(CodeRunner),它在登录模式下执行脚本并在窗口中显示输出。 在错误情况下,它会返回带有转义字符的代码,以使输出难以阅读。使用颜色代码处理bash输出
有没有办法来处理颜色代码?是否有过滤器来删除颜色代码?
我有一个Mac App(CodeRunner),它在登录模式下执行脚本并在窗口中显示输出。 在错误情况下,它会返回带有转义字符的代码,以使输出难以阅读。使用颜色代码处理bash输出
有没有办法来处理颜色代码?是否有过滤器来删除颜色代码?
在Mac OS X中,我使用了stderred库。
#export DYLD_INSERT_LIBRARIES="/LOCATION_OF_THE_LIB/libstderred.dylib${DYLD_INSERT_LIBRARIES:+:$DYLD_INSERT_LIBRARIES}"
删除此库设置将显示没有代码的字符串。
如果我理解你的问题,在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 #
)设置颜色。
他的输出已经有了转义码(或者是其中的一部分)。他希望他们能够正确解释或从输出中删除。 – chepner
建议使用'tput'来确定当前终端的正确代码可能是一个好主意。 –
控制字符(转义)仍然在输出中或被某些东西剥离了吗? –
@Etan Reisner:他们都在那里,附加的图片是从输出窗口捕获的屏幕。 – prosseek
颜色代码是'\ E [31m',其中'\ E'是一个转义符。该输出显示字符串的非转义部分。我假设逃跑在那里,但他们可能已经不在这一点。无论程序如何生成该输出,都可能需要对其提交一个错误信息,以便在不输出到终端时不输出颜色代码。 –