在我的 .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