내 .bash_profile에서는 script -a -t 0 session.log
모든 터미널 입력/출력을 session.log 파일에 자동으로 기록합니다. 이 명령에는 다른 파일의 시간 차이를 기록하기 위한 선택적 플래그가 포함되어 있다는 것을 알고 있지만 session.log 행 앞에 타임스탬프를 붙일 수 있는 다른 방법이 있는지 궁금합니다.
session.log에 쓰기 전에 쓰기를 다른 쉘 함수로 파이프할 수 있습니까? 이와 같은 것 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