使bash脚本打印集-x输出为粗体,但输出为普通文本

使bash脚本打印集-x输出为粗体,但输出为普通文本,bash,syntax-highlighting,Bash,Syntax Highlighting,我希望.sh中的每个命令都以粗体打印,但命令生成的输出不以粗体打印 (这样我就可以清楚地看到脚本的作用——有很多输出) 测试用例: > cat foo.sh #!/bin/bash set -x echo foo > ./foo.sh + echo foo foo (我想要粗体的+echo foo,以及foo普通,而不需要手动指定转义序列,这会让许多命令变得难看) 我知道如何使用带有终端转义序列的echo或printf输出粗体文本;但是如何影响set-x输出的格式呢?最简单的方法

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

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

测试用例:

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

> ./foo.sh
+ echo foo
foo
(我想要粗体的
+echo foo
,以及
foo
普通,而不需要手动指定转义序列,这会让许多命令变得难看)


我知道如何使用带有终端转义序列的
echo
printf
输出粗体文本;但是如何影响set-x输出的格式呢?

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

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

您可以将
PS4
设置为包含
tput bold
,但打印
set-x
后没有要执行的命令,因此无法将行为重置回正常状态。

我最终决定对每个命令应用粗体:

BOLD='\033[1m'
RESET='\033[0m'

bold() { 
    printf '${BOLD}%s${RESET}\n' "$*"
    "$@"
}

bold ls

而且
{tput bold;printf'%s\n'$*“tput sgr0;“$@”}
也能工作。

您搜索了什么,找到了什么?您尝试了什么,它是如何失败的?请阅读bash手册中的
PS2
PS3
PS4
变量,然后将其与副本连接。尽管如此,我仍然不相信可以重新设置标志,因为
PS4
仅在开始时打印。