根据您的说法,记录脚本错误的最佳方法是什么。
我尝试过以下方法,但似乎什么都没有完成。 (我已经添加了例外)这个 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
您似乎正在通过以下任一方式绕过正确的解决方案
- 将 的输出
find
作为命令运行(这是当您find
在命令替换中使用然后将该命令替换用作命令时发生的情况,如选项 1 和 3 中所做的那样),或者 - 将输出流和错误流分别重定向到
log.txt
.
正确的变化是
find ... >log.txt 2>&1
也就是说,运行命令并将输出重定向到文件,然后还将错误流重定向到标准输出所在的位置。
如果您只想记录错误,则不要重定向标准输出:
find ... 2>log.txt
在moreutils
包中,您将找到一个名为的命令ts
,您可以使用它来获取命令输出中的时间戳:
find ... 2>&1 >/dev/null | ts >log.txt
上面的命令将丢弃标准输出,find
但将时间戳添加到错误输出并将其存储在log.txt
.