linux Bash记录器输出

esbemjvw  于 2023-08-03  发布在  Linux
关注(0)|答案(1)|浏览(99)

我正在写bash logger,它记录脚本的每一行。
我有这个:

exec > >(tee $LOG) 2>&1

trap "echo 'ERROR: An error occurred during execution, check log $LOGFILE for details.' >&3" ERR
trap '{ set +x; } 2>/dev/null; echo -n "$(date '+[%Y-%m-%d][%H:%M:%S]') "; set -x' DEBUG

字符串
但问题是,日志文件很好(时间戳,命令,输出)。但我更希望终端中没有时间戳和命令。
有没有一种方法可以只将输出打印到终端,而将所有内容都打印到文件中?我不确定这是否可能与执行命令或我需要不同的方法。

c7rzv4ha

c7rzv4ha1#

您可以通过设置BASH_XTRACEFD将跟踪重定向到不同的流,并且可以通过设置PS4为日期添加前缀。因此,创建一个直接写入日志文件的流,并将其用于命令跟踪。和tee您的输出使用--append选项,到同一个文件。

truncate -s 0 "$LOG"
exec 3>>"$LOG"
exec &> >(tee -a "$LOG")

PS4='+\D{[%Y-%m-%d][%H:%M:%S]} '
BASH_XTRACEFD=3

trap 'echo "ERROR: An error occurred during execution, check log $LOG for details." >&2' ERR

set -x

字符串

相关问题