我正在编写一个BASH脚本,我需要做的两件事是:
我发现这两个目标是冲突的。
首先,我正在使用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
当前台管道返回时,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] 删除。
我来说两句