1

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

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

直到这里一切正常。

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

anyCommand | ccze -A

一切都以美丽的彩色方式印刷。问题是,如果我尝试将其应用于我的特定情况,在使用管道对 myComplexCommand 进行 ccze 之后,屏幕上的输出是彩色的(很好!)但它会改变存储在我想在我的帖子上解析的文件中的输出-解析任务,它不起作用。

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

4

1 回答 1

1

tee在着色发生之前在管道中的某个点归档:

myComplexCommand | tee filename | ccze -A

顺便说一句,使用 bash 4.1 或更高版本,如果您想将大量数据发送到文件和以彩色形式发送到 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跨多次使用的持久副本。

于 2017-06-03T23:55:37.177 回答