【问题标题】:Awk colors don't show up in XtermXterm 中不显示 Awk 颜色
【发布时间】: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


【解决方案1】:

sn-p 在转义序列中使用 RGB 风格“2”,它应该在 patch #282 之后与 xterm 一起使用(这似乎有点旧,但 SLSE 11 比这早几个月)。

如果您必须硬编码,RGB 风格的“5”更便携。但可移植应用程序使用 tput 之类的东西,而不是依赖常量。

所指的“2”在这个字符串中(重复多次):

\033[1;37;48;2;0;0;128m
             ^

并在讨论 ISO-8613-6 的段落中的 XTerm Control Sequences 中提及。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多