我的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修改)以便稍后解析?
答案 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
可以在多种用途中保留。