linux - 如何为每个命令向 bash 脚本日志添加时间戳并排除 set、echo、log?

标签 linux bash logging

如何为每个命令(不包括 set、echo、log)向 bash 脚本日志添加时间戳?

我正在运行一个备份脚本并希望记录所有带有时间戳的命令:

 #./svnbackup.sh 2&>1 | timestamp_xtrace > ./svn-backup.log 2>&1

这是我的函数,它不起作用:

 timestamp_xtrace() {
   while IFS= read -r line; do
     if [[ "$line" =~ "^+ set" ]] && [[ "$line" =~ "^+ echo" ]] && [[ "$line" =~ "^+ log" ]]; then
         echo "$(date) $line";
     fi
   done
 }

我想排除一些命令(set、echo、log...)但它不起作用.. 有人有解决我问题的提示吗?

最佳答案

我找到了一个可行的解决方案:

timestamp_xtrace() {
   while IFS= read -r line; do
     if [[ "$line" != "+ set"* ]] && [[ "$line" != "+ echo"* ]] && [[ "$line" != "+ log"* ]]; then
       echo "$(date) $line";
     fi
   done
}

我将正则表达式 (=~ "^ "+ echo") 更改为 (!= "+ echo"*) 因此测试匹配正确的行:

# cat << EOF | timestamp_xtrace
+ somecmd
+ echo "hello world!"
hello world!
+ svnadmin -args
EOF

输出:

Wed Sep 30 09:12:43 CEST 2015 + somecmd
Wed Sep 30 09:12:43 CEST 2015 hello world!
Wed Sep 30 09:12:43 CEST 2015 + svnadmin -args

关于linux - 如何为每个命令向 bash 脚本日志添加时间戳并排除 set、echo、log?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32846714/

相关文章:

c - Shell命令makefile参数函数

linux - 目录 "/etc/ss/certs"包含什么?

python - 从 shell 和 python 中的行中删除字符串

linux - 删除重复项并首先保留在 unix 中的 csv 文件中

bash - 将我的bash的输出重定向到日志文件

bash - 从另一个 shell 脚本调用函数

c++ - OpenGL系统监视器

java - 如何在 Jetty 服务器中启用有线日志记录

windows - Windows 应用程序中的日志记录(跟踪)指南

c++ - 多线程进程中同步写入日志