击。使用ccze而不更改数据以进行解析

时间:2017-06-03 23:47:51

标签: bash parsing stdout tee colorize

我的bash脚本上有一个复杂的命令,可以在stdout上打印很多信息。此命令很复杂,需要一些时间才能完成,但完全正常。与此同时,我正在使用带有三通的管道将其写入文件以进行解析后任务。

cmd="myComplexCommand | tee /dev/fd/5"
exec 5>&1
stored_output=$(eval "${cmd}")

直到这里一切正常。

现在,我正在尝试实施ccze来着色屏幕输出。通常在任何命令上使用它都很简单:

anyCommand | ccze -A

所有东西都以美丽的颜色印刷。问题是,如果我尝试将此应用于我的特定情况,在我的myComplexCommand上使用管道进行ccze后,屏幕上的输出会着色(很好!)但它会改变存储在我想要在我的帖子上解析的文件的输出-parse任务,它不起作用。

是否有Bash方式在屏幕上以美观的方式使用ccze打印命令,同时将其存储在文件中(不进行ccze修改)以便稍后解析?

1 个答案:

答案 0 :(得分:1)

tee在着色之前在管道中的某个位置进行归档:

myComplexCommand | tee filename | ccze -A

顺便提一下,对于bash 4.1或更高版本,如果要将 lot 数据发送到文件并以彩色形式发送到TTY,您可以将这两个操作放在单个进程替换中:

exec {stdout_backup}>&1
exec {store_and_colorize}> >(tee filename | ccze -A | tee /dev/fd/"$stdout_backup")

然后根据需要重复使用该进程替换次数:

result=$(something >&$store_and_colorize)
another_result=$(something_else >&$store_and_colorize)

通过这种方式,您只有一份ccze可以在多种用途中保留。