【问题标题】:sending echo and error to both terminal and file log向终端和文件日志发送回显和错误
【发布时间】:2017-05-30 21:32:16
【问题描述】:

我正在尝试修改某人在 shell 中为 unix 创建的脚本。该脚本主要用于在没有人工交互的情况下在支持的服务器上运行,但是我需要制作另一个脚本来允许用户输入信息。因此,它只是修改为旧版本以供用户输入。但我遇到的最大问题是试图将错误日志和回声都保存在日志文件中。该脚本有很多,但我希望在终端上显示它们并将它们发送到指定的日志文件,以便稍后查看。

我拥有的是这样的:

exec 1> ${LOG} 2>&1

这一行几乎是将所有内容发送到日志文件。这一切都很好,但我也有人试图在脚本中输入信息,它会将所有内容发送到日志文件,包括提示所需的回显。这一行也在脚本的开头,但更多地阅读了 stderr 和 stdout 消息。我试过了:

exec 2>&1 1>>${LOG}
exec 1 | tee ${LOG} But only getting error when running it this "./bash_pam.sh: line 39: exec: 1: not found"

我已经通过网站such as this 解决了这个问题,但我不明白为什么它不能同时打印到两者。我插入它的方式,它要么只将其发送到日志位置而不发送到终端,要么将其发送到终端,但日志中没有任何内容。

编辑:一些解决方案,为此提到某些修复将在 bash 中有效,但在 /bin/sh 中无效。

【问题讨论】:

  • 如果我理解正确,您只想在标准输出中显示错误并记录到文件中?
  • 嗯,我希望回声到达终端,但同时希望将回声和错误发送到日志位置。
  • “回声”是指没有错误输出,这是不清楚的。
  • 是的,很抱歉造成混乱,修改脚本,更不用说尝试创建脚本了。
  • command 2>&1 | tee -a out.log 将输出(错误和常规消息)到屏幕和文件。

标签: bash shell unix logging terminal


【解决方案1】:

如果您希望将所有输​​出打印到控制台,同时打印到 logfile.txt,您可以在脚本上运行此命令:

bash your_script.sh 2>&1 | tee -a logfile.txt

或者在文件中调用它:

<bash_command> 2>&1 | tee -a logfile.txt

要附加到logfile.txt 而不是覆盖,请将-a 选项添加到tee

【讨论】:

  • 这将为终端上打印的每一行覆盖logfile.txt。您需要 tee -a 将新行附加到日志文件。
猜你喜欢
  • 2014-11-20
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-14
  • 2010-09-26
  • 1970-01-01
  • 2012-11-01
相关资源
最近更新 更多