首页 > 解决方案 > 使 bash 脚本打印 set -x 以粗体形式输出,但输出为普通文本

问题描述

我希望 .sh 中的每个命令都以粗体打印,但命令生成的输出不是粗体。

(这样我就可以清楚地看到脚本的作用——有很多输出)。

测试用例:

> cat foo.sh
#!/bin/bash
set -x
echo foo

> ./foo.sh
+ echo foo
foo

(我想要+ echo foo粗体和foo正常的,而不需要手动指定转义序列,这会因许多命令而变得难看)。

我知道如何使用终端转义序列echoprintf使用终端转义序列输出粗体文本;但是我怎样才能影响set -x输出的格式呢?

标签: bashsyntax-highlighting

解决方案


最简单的方法是在输出出现时对其进行解析。

$ ./foo.sh 2> >(sed "/+ .*/s//$(tput bold)&$(tput sr0)/")

您可以设置PS4为 contains ,但是在打印之后tput bold没有要执行的命令,因此无法将行为重置为正常。set -x


推荐阅读