私の.bash_profileは、script -a -t 0 session.log
すべての端末の入力/出力をsession.logファイルに自動的に記録します。このコマンドには、他のファイルの時間差を記録するためのオプションのフラグが含まれていますが、session.log行の前にタイムスタンプを付ける別の方法があるかどうか疑問に思います。
session.logに書き込む前に、書き込みを別のシェル関数にパイプできますか?このようなものscript -a >(add_timestamps.sh >> session.log)
(動作しない)
答え1
あなたの例にはおそらく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