我有一个脚本,将由非技术用户交互地运行。脚本将状态更新写入STDOUT,以便用户可以确保脚本正在运行。
我想要将STDOUT和STDERR重定向到终端(以便用户可以看到脚本正常工作以及是否有问题)。我也想要两个流重定向到日志文件。
我在网上看到了一堆解决方案。一些不工作,其他人非常复杂。我开发了一个可行的解决方案(我将作为回答输入),但它是kludgy。
完美的解决方案将是单行代码,可以合并到任何脚本的开始,将两个流发送到终端和日志文件。
编辑:重定向STDERR到STDOUT和管道的结果到tee工程,但它取决于用户记得重定向和管道输出。我希望日志记录是愚蠢的和自动的(这就是为什么我想能够嵌入解决方案到脚本本身)。
更新:将我的所有答案合并成一个
原文链接:https://www.f2er.com/bash/390270.html使用“tee”重定向到文件和屏幕。根据您使用的shell,您必须首先将stderr重定向到stdout使用
./a.out 2>&1 | tee output
要么
./a.out |& tee output
在csh中,有一个内置的命令“脚本”,它将捕获到屏幕到文件的所有内容。你通过键入“script”启动它,然后做任何它想要捕获,然后点击control-D关闭脚本文件。我不知道一个等效的sh / bash / ksh。
此外,由于您现在已经指出这些是您自己的sh脚本,您可以修改,您可以通过用大括号或括号包围整个脚本在内部进行重定向,例如
#!/bin/sh { ... whatever you had in your script before } 2>&1 | tee output.file