[英]How to add a timestamp to bash script log for every command and exclude set, echo, log?
How to add a timestamp to bash script log for every command (exclude set, echo, log) ?如何为每个命令(排除 set、echo、log)向 bash 脚本日志添加时间戳?
Im running a backup script and want to log all commands with timestamp:我正在运行一个备份脚本并想用时间戳记录所有命令:
#./svnbackup.sh 2&>1 | timestamp_xtrace > ./svn-backup.log 2>&1
this is my function, which doesnt work:这是我的功能,它不起作用:
timestamp_xtrace() {
while IFS= read -r line; do
if [[ "$line" =~ "^+ set" ]] && [[ "$line" =~ "^+ echo" ]] && [[ "$line" =~ "^+ log" ]]; then
echo "$(date) $line";
fi
done
}
i want to exclude some commands (set, echo , log...) but it doesnt work.. does someone have a hint to solve my problem?我想排除一些命令(set、echo、log...)但它不起作用..有人有解决我的问题的提示吗?
I found a working solution:我找到了一个可行的解决方案:
timestamp_xtrace() {
while IFS= read -r line; do
if [[ "$line" != "+ set"* ]] && [[ "$line" != "+ echo"* ]] && [[ "$line" != "+ log"* ]]; then
echo "$(date) $line";
fi
done
}
i changed the regex ( =~ "^ "+ echo"
) to ( != "+ echo"*
) so the test is matches the right lines :我将正则表达式( =~ "^ "+ echo"
)更改为( != "+ echo"*
),因此测试与正确的行匹配:
# cat << EOF | timestamp_xtrace
+ somecmd
+ echo "hello world!"
hello world!
+ svnadmin -args
EOF
Output:输出:
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
This bash function should do the job:这个 bash 函数应该可以完成这项工作:
timestamp_xtrace() {
while IFS= read -r line; do
[[ "$line" =~ ^[[:blank:]]*(set|echo|log) ]] && echo "$(date):: $line"
done
}
^[[:blank:]]*(set|echo|log)
will match set
OR echo
OR log
at start of line optionally preceded by space or tab. ^[[:blank:]]*(set|echo|log)
将匹配set
OR echo
OR log
在行首,可选地以空格或制表符开头。
Testing:测试:
cat << EOF | timestamp_xtrace
foo bar
log something testing
echo and more
abc xyz
EOF
Output:输出:
Tue Sep 29 10:40:44 EDT 2015:: log something testing
Tue Sep 29 10:40:44 EDT 2015:: echo and more
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.