【发布时间】:2015-02-19 10:07:34
【问题描述】:
我正在编写一个用户命令作为别名,它使用不同颜色的 awk 打印输出。
我想出的小 sn-p 在 KDE Konsole 中运行良好,但在 xterm 或 gnome-terminal 中却不行。
我的 shell 是 SLES11 上的 BASH,终端设置为 XTERM
myuser@myhost:~> env |grep -i term
TERM=xterm
COLORTERM=1
别名定义如下:
alias myCustomPS="\
awk '{ \
gsub(/\.CONTEXT/,\"\", \$11); \
split(\$11,v,\"_D\"); \
split(\$13,h,\".\"); \
if (\$1==\"usr1\")
printf \"pid [\033[1;37;48;2;0;0;128m %5s \033[0m] [\033[1;37;48;2;0;0;128m %.8s \033[0m] \033[1;37;48;2;0;0;128m %-8.10s \033[0m D%-8s\n\", \$2, \$1, h[1], v[2]; \
else if (\$1==\"usr2\") \
printf \"pid [\033[1;37;48;2;0;170;170m %5s \033[0m] [\033[1;37;48;2;0;170;170m %.8s \033[0m] \033[1;37;48;2;0;170;170m %-8.10s \033[0m D%-8s\n\", \$2, \$1, h[1], v[2]; }'"
我得到的输出仅在 Konsole 中正确显示。
xterm 和 gnome-terminal 都不能正确显示。 在 Xterm 中根本不显示颜色,在 gnome-terminal 中只显示字体颜色,没有背景。
有任何想法或替代方法来普遍着色 awk 输出吗? 谢谢, 罗伯托
【问题讨论】:
-
如果没有代表性样本输入,这真的很难测试。您能否提供一些脚本,或者将脚本缩减到最低限度,以尝试为任何随机文本着色?
-
不要硬编码转义序列。使用
tput或类似方法查询终端以获取用于当前终端类型的序列。我将假设这些序列对于 xterm 或 gnome-terminal 是不正确的。我知道至少在受支持的颜色方面Konsole应该对可用的颜色有更广泛的支持(实际上我相信任何任意颜色)。 -
如果我没记错的话,您需要将 TERM 设置为 xterm-color 或类似的东西才能在 xterm 中获取颜色,请尝试查看 stackoverflow.com/questions/10003136/…
-
你不能对所有的转义感到满意 - 把它放在一个函数或一个 shell 脚本中,而不是一个别名。
-
好吧,别名确实被定义到一个shell脚本中,并在同一个shell脚本中的函数定义中使用。我会尽量让它更简单,并提供一个可用的 sn-p。
标签: bash awk xterm gnome-terminal konsole