编辑:
你的要求是不可能的:
-
没有修补
bash
,无法分离bash的
-v
程序stderr的输出
-
即使这是可能的,分割输出也不能很容易地重新同步,因此您不能让每一行的颜色都直接跟在它的输出后面。
你能轻易得到你想要的东西的唯一方法就是
-
调整脚本,使每一行都可以单独获得源代码(是一个有效的bash命令行)
-
创建一个包装器脚本,逐行读取脚本,并在打印着色后对其进行求值。
我最初的答案(保留在下面)使用了一种解决方法,它可以实现您想要的功能,但需要注意的是将所有着色输出分组到一个块中(并且您希望在执行时对每一行进行着色)。
原件:
因为目前没有办法告诉bash使用另一个描述符
-五
的输出,因此无法将其与脚本的stderr分离。
如果你只想突出显示
-五
的输出(而不是stderr),唯一可以实现的方法是调整脚本以手动分离流:
-
添加
exec 2>&3
作为你剧本中的第一条指令,
-
将剩下的代码包装在
{ ... ; } 2>&4
块
-
呼叫
bash -v newscript 3> >(sed $'s,.*,\e[38;5;123m&\e[m,' >&2) 4>&2
如果希望包装器自动执行所有这些操作,可以使用以下命令:
bash -v <(printf %s\\n 'exec 2>&3' '{'; cat script; printf %s\\n '' '} 2>&4') 3> >(sed $'s,.*,\e[38;5;123m&\e[m,' >&2) 4>&2
或者如果你是
echo
风扇:
bash -v <(echo $'exec 2>&3\n{'; cat script; echo $'\n} 2>&4') 3> >(sed $'s,.*,\e[38;5;123m&\e[m,' >&2) 4>&2
-
(注意
''
第二部分
printf
是处理没有尾随换行符的脚本)
-
请务必使用其他FD
3
和
4
你的脚本需要使用它们吗