【问题标题】:When the script fails, it doesn't do the echo "TEXT" >> FILE当脚本失败时,它不会执行 echo "TEXT" >> FILE
【发布时间】:2019-05-22 06:47:32
【问题描述】:

我有一个脚本,它的开头和结尾都有:

echo "start" >> log 
echo "end" >> log

原因是当脚本无法控制地失败时,我在 LOGS 文件中看不到任何行。但是,当脚本正确完成时,日志会显示在 LOG 中。

有人知道为什么会这样吗?

【问题讨论】:

  • 欢迎使用。请阅读How to askminimal reproducible example
  • I don't see any line in the LOGS - 你没在日志文件中看到start吗?
  • “为什么”可能是很多事情;也许你启动了一个单独的程序,当它退出非零时删除log。如果你不告诉我们,我们怎么知道?我们不需要/想要您的实际代码,但我们确实需要尽可能短的代码,让我们在不更改运行时自己体验特定问题,并在问题发生时进行测试固定。

标签: shell scripting echo


【解决方案1】:

因为标准的 stderr 是 2,所以默认的日志输出只显示从 1 开始的 stdout。做一个测试并显示结果。如果您将所有脚本发送到仅记录一行,请在定义日志文件后进行:

log_file="/tmp/script.log"
exec >> $log_file 2>&1

【讨论】:

  • 他们说即使start 行在发生错误后也不在输出文件中。那条线在标准输出上,而不是标准错误上。为什么您期望重定向 stderr 会对输出文件是否包含 start 产生任何影响?
  • 顺便说一句,您可以选择编辑现有答案,而不是添加其他答案
【解决方案2】:

您需要将错误输出 (2) 定向到标准 stdout:

echo "start" >> log 2>&1
echo "end" >> log 2>&1

【讨论】:

  • 如果echo直接发出的stdout不能写入文件,为什么stderr会有不同的表现?
猜你喜欢
  • 2013-11-15
  • 1970-01-01
  • 2011-06-28
  • 2021-05-18
  • 2021-09-19
  • 2020-11-24
  • 2020-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多