자동 업데이트를 위한 bash 스크립트가 있습니다. 이 스크립트의 모든 출력을 기록하고 각 줄 앞에 타임스탬프를 추가하고 싶습니다. 이미 가지고 있는 것에 이것을 어떻게 추가해야 할지 모르겠습니다.
LOGFILE="logdir/update.sh.$(date +%Y-%m-%d_%H:%M).log"
exec 1>$LOGFILE 2>&1
이것은 내 스크립트의 출력을 파일로 올바르게 리디렉션하지만 (분명히) 날짜를 줄에 추가하지 않습니다. 이것을 어떻게 추가할 수 있나요?
예를 들어, 내가 기록하고 싶은 출력은 다음과 같습니다.
[2019-11-07 1:43:45 PM]: Ign http://security.debian.org jessie/updates InRelease
나는 스크립트의 각 명령 앞에 아무것도 추가하고 싶지 않고 스크립트 전체에 걸쳐 전역적으로 타임스탬프를 찍고 하나의 명령에서 나오는 모든 출력 줄을 기록하고 싶습니다.
답변1
타임스탬프를 추가하는 프로그램으로 스크립트의 표준 출력을 리디렉션한 다음 에 언급된 명령을 사용할 수 있습니다 exec
.ts
이 답변, 다음과 같이 작동해야 합니다.
#!/bin/bash
logfile="logdir/update.sh.$(date +%Y-%m-%d_%H:%M).log"
exec 1>> >(ts '[%Y-%m-%d %H:%M:%S]' > "$logfile") 2>&1
echo doing some real work...
여기서 프로세스 대체는 일반 파이프와 결합할 수 없다는 점을 제외하면 파이프와 약간 유사합니다 exec
. 표준 기능은 아니지만 Bash, ksh 및 zsh와 같은 보다 강력한 쉘에서 사용할 수 있습니다.
물론 제외, ts
당연 제외, 질문에 대한 답변 제외명령 출력의 각 줄 앞에 타임스탬프를 추가합니다.