it-swarm-ja.com

「script」コマンドを使用して、記録されたセッションにタイムスタンプを追加します

私の.bash_profileには、すべての端末の入力/出力をsession.logファイルに自動的に記録する_script -a -t 0 session.log_があります。このコマンドには、別のファイルに時差を記録するためのオプションのフラグが付属していることは知っていますが、session.log行の前にタイムスタンプを付ける別の方法があるかどうか疑問に思いました。

Session.logに書き込む前に、書き込みを別のシェル関数にパイプできますか?このようなものscript -a >(add_timestamps.sh >> session.log)(機能しません)

3
Luiz

おそらく、例から欠落しているのは、オプション-f毎回書き込みをフラッシュします。

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

これは、ニーズによっては部分的な解決策になる場合があります。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
1
mARK

moreutils からtsのように聞こえます。

多くのディストリビューションでパッケージ化されています。入力行の前にタイムスタンプを追加するだけです。

使用例:

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

ログ出力先としてawkを使用することにより、各行の先頭にタイムスタンプを追加できます。

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

例)

[[email protected] ~]# LANG=C script -fq >(awk '{print strftime("%F %T ") $0}{fflush() }'>>
session.log)
[[email protected] ~]# pwd
/root
[[email protected] ~]#
[[email protected] ~]# echo aaa
aaa
[[email protected] ~]#
[[email protected] ~]# exit
exit
[[email protected] ~]#
[[email protected] ~]# 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 [[email protected] ~]# pwd
2017-05-26 01:12:13 /root
2017-05-26 01:12:14 [[email protected] ~]#
2017-05-26 01:12:16 [[email protected] ~]# echo aaa
2017-05-26 01:12:16 aaa
2017-05-26 01:12:16 [[email protected] ~]#
2017-05-26 01:12:17 [[email protected] ~]# exit
2017-05-26 01:12:17 exit
0
Naofumi Uesugi