【问题标题】:How to make bash command echo lines green如何使 bash 命令回显行变为绿色
【发布时间】:2015-06-28 18:30:04
【问题描述】:

我有一个打开命令 echo 的 bash 脚本(set -x)。我希望以绿色文本打印回声线,但实际命令的输出是默认颜色。我可以使用 $PS4 来获得绿色,但我没有看到在每次回显后将其关闭的方法,因此结果是所有输出都变为绿色。

【问题讨论】:

  • 不使用 ANSI 控制字符,您可以检查您的终端仿真器是否可以自动突出显示与特定正则表达式匹配的行(并设置 PS4 以便可以唯一匹配所需的行。)
  • 要打印的行是什么意思?
  • @JID,当您将set -x 放入脚本中时,bash 在执行之前将每个命令打印到终端。此外,各种命令可能有一些输出,它们也会打印到终端。我想通过颜色来区分两者。
  • @chepner,有趣的想法,但我希望得到一个可跨不同终端仿真器工作的便携式解决方案。
  • 我不知道你可以直接这样做。不过,您可以通过后处理轻松做到这一点。

标签: linux bash terminal-color


【解决方案1】:

试试这个:

#!/bin/bash
exec 3<> >(sed -e "s/.*/\o033[0;32m&\o033[0m/")
BASH_XTRACEFD=3
set -x
...

(我相信需要 bash 4.1;如果您愿意,可以使用 awk 或 perl 或 bash 内建函数代替 sed)

【讨论】:

  • 太棒了! (虽然我最终使用了 sed 而不是 perl。)
  • @Ari:使用 sed 的效果如何?
  • exec 3&lt;&gt; &gt;(sed -e "s/.*/\o033[0;32m&amp;\o033[0m/")
  • perl 版本其实有个小问题,如果脚本的某个命令失败,导致脚本退出。在这种情况下,脚本打印的最后一行没有被换行符终止,并且提示出现在行尾而不是新行中。 sed 版本没有这个问题,我也懒得用 perl 去弄清楚是什么原因造成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多