#!/bin/bash
tstamp() { date +[%T:%N]; }
yourscript() {
set -x
echo hello
sleep 1
echo this
sleep 2
echo is
sleep 3
echo an
echo example
}
yourscript | while read line; do echo -e "$(tstamp)\t$line"; done
上面的脚本输出以下内容:
+ echo hello
+ sleep 1
[16:17:33:344851100] hello
+ echo this
+ sleep 2
[16:17:34:352269700] this
+ echo is
+ sleep 3
[16:17:36:380810900] is
+ echo an
+ echo example
[16:17:39:392033300] an
[16:17:39:414361400] example
在 Bash 中,您可以使用
PS4
- 来为set -x
跟踪输出添加前缀。在 Bash 中,可以使用内置的“trap”和“DEBUG”级别来实现每个命令之后的代码执行。
在 bash 中做:帮助陷阱或参考 bash 手册页,并查找陷阱部分
例子:
这将在每个命令之后执行命令“date”。
当然,您可以根据需要格式化时间戳,请参阅“日期”手册页。
如果要删除换行符,以便时间戳出现在下一个命令的前面,您可以执行以下操作:
并终止此:
您可以结合“set -x”/“set +x”
并不是说这是一个完美的解决方案,但我认为它基本上可以满足您的需求。只需将主脚本包装在一个函数中,并有一个单独的函数来调用时间。我确信这可以大大改进以获得确切的预期结果,但这是我想出的:
上面的脚本输出以下内容: