加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 16:12:56 所属栏目:安全 来源:网络整理
导读:我有一个脚本,将由非技术用户交互地运行。脚本将状态更新写入STDOUT,以便用户可以确保脚本正在运行。 我想要将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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读