如何在BASH中同时创建带有时间戳的日志和错误处理?

亚历克斯

我正在编写一个BASH脚本,我需要做的两件事是:

  1. 提供带有时间戳的日志文件。
  2. 处理错误。

我发现这两个目标是冲突的。

首先,我正在使用ts命令为日志条目打上时间戳,例如<a command/subscript> 2>&1 | ts '%H:%M:%S ' >> log请注意,我还需要为所有下标的所有行输出加上时间戳。这很好用...直到我尝试使用退出代码处理错误。

任何失败的命令(代码为1的退出)都将紧随其后的是ts成功执行命令(代码为0的退出)。这意味着我无法使用命令的退出代码来处理$?环境变量的错误,因为ts它始终是最后一个要运行的命令,并且退出代码始终为0。

这是我正在使用的案例陈述:

<command> 2>&1 | ts '%H:%M:%S ' >> log
case $? in
        0)
                echo "Success"
                ;;

        *)
                echo "Failure"
esac
oguz ismail

当前台管道返回时,bash将其组件的退出状态值保存到名为PIPESTATUS的数组变量中在这种情况下,您可以使用${PIPESTATUS[0]}(或仅对$PIPESTATUS您对第一个组件感兴趣);而不是$?获取<command>的退出状态值。

概念证明:

$ false | true | false | true
$ declare -p PIPESTATUS
declare -a PIPESTATUS=([0]="1" [1]="0" [2]="1" [3]="0")

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在`terraform`中创建带有时间戳的文件?

在Kubuntu中创建更改日志(带有时间戳)?

如何从bash脚本中将带有时间戳的stdout和stderr复制到文件中?

在 pyspark 中创建带有时间戳和 groupby 的 KPI

如何在Perl中获得带有时间戳的微秒?

重定向到日志文件时,如何在带有时间戳的stdout和stderr输出前添加前缀?

如何使用log4j2将日志保存到带有时间戳的文件中

Install4j:如何启用带有时间戳的日志记录

fluentd - 如何获取带有时间戳的日志文件名

在crontab中带有时间戳的RM输出日志

使用带有时间戳的批处理脚本创建目录

如何在Python中解析带有时间和毫秒的解析日期?

在Winscp中创建自定义命令,该命令将在文件创建时创建带有时间戳的日志文件

在URL中带有时间戳的Spring RequestMapping

如何使用命令行创建带有时间戳的文件

WinSCP中的自定义命令,该命令在创建文件时创建带有时间戳的日志文件

带有时间戳更新的gridviewUpdating asp.net中的错误

将错误从 Azure Devops 提取到带有时间戳的状态更改的 CSV 中

如何在雪花中使用带有时间戳的滞后功能?

如何在JPQL中比较时间戳和日期而没有时间?

如何使用PrimeFaces和ChartJs显示带有时间戳的数据?

根据带有时间戳和时区的文本中的日期对Excel表进行排序

如何在UTC中获得时间戳但没有时间?

KDB/Q:如何在给定时间戳之前获取带有时间戳的记录

如何从带有时间戳的熊猫数据框中删除未更改的值?

如何从带有时间戳的图像列表中渲染视频?

如何获取带有时间戳的帧,其中从python中的视频转换帧

如何在带有时间的日期的列表中过滤时间范围或时间范围?

每个日志条目带有时间戳的log4j