记录 UNIX shell 脚本错误的最佳方法是什么

记录 UNIX shell 脚本错误的最佳方法是什么

根据您的说法,记录脚本错误的最佳方法是什么。

我尝试过以下方法,但似乎什么都没有完成。 (我已经添加了例外)这个 find 命令将不起作用,因为用户没有权限/home/data/work/目录

1.)

$(find /home/data/work/. -type f -delete) >log.txt 2>&1

这不会写任何东西到我的日志.txt

2.)

find /home/data/work/. -type f -delete >log.txt 2>log.txt

这里执行没有 $() 的命令似乎不正确

3.)

function log_this() {
echo "$(date): $*" | tee -a log.txt
}
$(find /home/data/work/. -type f -delete) || { log_this "error"; exit 1; }

这会将按摩“错误”记录到日志文件中,但在这里我无法将错误从命令重定向到 log_this 函数。

有哪些好方法可以生成脚本日志,我可以使用 $() 并将自定义消息和原始错误写入日志文件。

答案1

您似乎正在通过以下任一方式绕过正确的解决方案

  1. 将 的输出find作为命令运行(这是当您find在命令替换中使用然后将该命令替换用作命令时发生的情况,如选项 1 和 3 中所做的那样),或者
  2. 将输出流和错误流分别重定向到log.txt.

正确的变化是

find ... >log.txt 2>&1

也就是说,运行命令并将输出重定向到文件,然后还将错误流重定向到标准输出所在的位置。

如果您只想记录错误,则不要重定向标准输出:

find ... 2>log.txt

moreutils包中,您将找到一个名为的命令ts,您可以使用它来获取命令输出中的时间戳:

find ... 2>&1 >/dev/null | ts >log.txt

上面的命令将丢弃标准输出,find但将时间戳添加到错误输出并将其存储在log.txt.

相关内容