我在Makefile中使用tput setaf [colornum] && echo [text] && tput sgr0
来突出显示输出的某些部分,这很好地在输出中更快地找到内容。我的问题是,当我想记录输出时,例如使用make > my_log.txt
时,文件将所有这些控制字符放在之前着色的行的前面。有没有一种简单的方法可以在终端中同时具有格式化输出以及将它作为日志存储的能力?我更喜欢一个解决方案,其中stdout保持可记录状态,而不是在脚本/ makefile中内部处理日志文件。彩色终端输出和日志记录
0
A
回答
2
在打印您的魔法字符之前,您需要测试stdout是否为终端。如果它不是一个终端,你不应该打印它们。你可以用[ -t 1 ]
来测试(1是stdout的文件描述符)。所以:
[ -t 1 ] && tput setaf [colornum]; echo [text]; [ -t 1 ] && tput sgr0; true
编辑
我要补充一点:开始用GNU让4.1,还可以测试make变量MAKE_TERMOUT
,如果它的设置,那么你应该假设你正在编写到终端,即使-t
说不。这是因为这些版本的make支持一个新功能--output-sync
,它确保即使在并行构建过程中并行作业的输出也不会混杂在一起。但是,为了做到这一点,make必须暂时捕获输出,然后以串行方式显示它,这意味着对于shell进程,它永远不会看起来像标准输出是终端。如果你使用的是GNU版本,你可以使用类似于:
$(if $(MAKE_TERMOUT),tput setaf [colornum];) echo [text] $(if $(MAKE_TERMOUT),; tput sgr0)
相关问题
- 1. 使用NPM运行脚本的彩色日志记录终端
- 2. Display Postgres服务器在终端输出日志并同时记录到日志
- 3. Sidekiq日志记录到终端和日志文件
- 4. 消息和彩信日志记录
- 5. AWS cloudwatch终端输出日志
- 6. Python日志记录到标准输出和日志文件
- 7. 彩色输出
- 8. 在Perl中输出日志记录
- 9. 去日志记录到多个输出
- 10. IntelliJ 14.1 xml日志记录输出
- 11. 在Java中输出日志记录
- 12. 彩色终端输出如何禁用sbt/play?
- 13. 如何更改日志记录输出的颜色log4j
- 14. ZF2日志记录:将自定义信息添加到日志记录输出
- 15. Python嘲笑日志记录,同时保留日志输出
- 16. Scala日志记录,将控制台输出直接输出到日志文件
- 17. jboss as 7.1.1最终日志记录
- 18. python日志记录不能从终端工作
- 19. Python stdout日志记录:终端vs bash文件
- 20. Python日志记录不工作 - 日志记录对象和sys.modules.pop()
- 21. sitecore日志记录(Sitecore.Diagnostics.Log.Error)和日志记录GUID
- 22. pytest日志记录到文件和标准输出
- 23. Spring日志记录和application.properties
- 24. wxWidgets和日志记录
- 25. 命令启动的彩色终端线
- 26. Linux终端色彩设计重叠
- 27. Html到ansi彩色终端文本
- 28. 恢复终端日志mac打印输出
- 29. Log4j终端日志正在执行,但没有输出文件
- 30. 如何禁用csh的precmd输出日志到终端?
完美,谢谢!所以我猜'-t'会检查你当前输出的文件描述符?这是非常有用的知道。 – 2015-01-21 05:52:41
编号'-t'检查你给它的描述符。上面我给它描述符1,正如我在我的回答中提到的那样,它是stdout的描述符。如果你想要的话,你可以使用'2'作为stderr,或者使用'0'作为标准输入,或者如果你碰巧知道它们是有效的,也可以使用其他数字。 – MadScientist 2015-01-21 13:29:37
我明白了,所以当stdout被重定向到一个文件时,带有describetor的'stdout文件'在bash中不会被视为'open'。感谢编辑。 – 2015-01-22 00:55:38