通过“script”命令将时间戳添加到记录的会话中

通过“script”命令将时间戳添加到记录的会话中

在我的 .bash_profile 中,我script -a -t 0 session.log自动将所有终端输入/输出记录到 session.log 文件中。我知道这个命令带有一个可选标志来记录另一个文件中的时间差异,但我想知道是否有另一种方法可以为 session.log 行添加时间戳前缀。

我可以在将写入写入 session.log 之前将写入通过管道传输到不同的 shell 函数吗?像这样的东西script -a >(add_timestamps.sh >> session.log)(不起作用)

答案1

您的示例中可能只缺少一件事,即-f每次刷新写入的选项。

script -f >(while read;do date;echo "$REPLY";done >>session.log)

答案2

这可能是部分解决方案,具体取决于您的需求:如果您在 PS1 字符串中包含 \d \D{},则每个命令提示符将包含日期和时间。这将为您提供上一个命令完成的时间。在最简单的情况下,做

    PS1='\d \D{} $ '

在调用脚本(或在 .bashrc 或其他内容中)后执行此操作,您将得到如下的 session.log:

    Wed Apr 20 08:23:55 PM $ date
    Wed Apr 20 20:23:57 EDT 2016
    Wed Apr 20 08:23:57 PM $ exit

答案3

听起来像是ts,从更多实用程序

许多发行版都将其打包。它只是将时间戳添加到输入行之前。

使用示例:

$ while true; do sleep 1; echo hi; done | ts %s
1461198715 hi
1461198716 hi
1461198717 hi
1461198718 hi
[ ... ]

答案4

通过使用 awk 作为日志输出目的地,您可以在每行的开头添加时间戳。

script -fq >(awk '{print strftime("%F %T ") $0}{fflush() }'>> session.log)

例子)

[root@BS-PUB-CENT7-01 ~]# LANG=C script -fq >(awk '{print strftime("%F %T ") $0}{fflush() }'>>
session.log)
[root@BS-PUB-CENT7-01 ~]# pwd
/root
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# echo aaa
aaa
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# exit
exit
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# cat session.log
2017-05-26 01:12:11 Script started on Fri May 26 01:12:11 2017
2017-05-26 01:12:13 [root@BS-PUB-CENT7-01 ~]# pwd
2017-05-26 01:12:13 /root
2017-05-26 01:12:14 [root@BS-PUB-CENT7-01 ~]#
2017-05-26 01:12:16 [root@BS-PUB-CENT7-01 ~]# echo aaa
2017-05-26 01:12:16 aaa
2017-05-26 01:12:16 [root@BS-PUB-CENT7-01 ~]#
2017-05-26 01:12:17 [root@BS-PUB-CENT7-01 ~]# exit
2017-05-26 01:12:17 exit

相关内容