bash – 如何获得STDOUT和STDERR去终端和日志文件?

前端之家收集整理的这篇文章主要介绍了bash – 如何获得STDOUT和STDERR去终端和日志文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个脚本,将由非技术用户交互地运行。脚本将状态更新写入STDOUT,以便用户可以确保脚本正在运行。

我想要将STDOUT和STDERR重定向到终端(以便用户可以看到脚本正常工作以及是否有问题)。我也想要两个流重定向到日志文件

我在网上看到了一堆解决方案。一些不工作,其他人非常复杂。我开发了一个可行的解决方案(我将作为回答输入),但它是kludgy。

完美的解决方案将是单行代码,可以合并到任何脚本的开始,将两个流发送到终端和日志文件

编辑:重定向STDERR到STDOUT和管道的结果到tee工程,但它取决于用户记得重定向和管道输出。我希望日志记录是愚蠢的和自动的(这就是为什么我想能够嵌入解决方案到脚本本身)。

更新:将我的所有答案合并成一个

使用“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
原文链接:https://www.f2er.com/bash/390270.html

猜你在找的Bash相关文章