2012-05-31 5 views
2

일반적으로 내 bash 스크립트에는 some_command >> log.log을 사용합니다. 이 잘 작동하지만 어떻게 시간과 명령 이름 같은 더 많은 데이터를 추가 할 수 있습니까?Bash : 파일에 명령 출력 및 시간 소인을 첨부하십시오.

내 목표는 프로세스가 실행과 동시에 파일에 기록해야이

2012-01-01 00:00:01 [some_command] => some command output... 
2012-01-01 00:01:01 [other_command] => other command output... 

같은 로그를하는 것입니다.

최종 솔루션, 내 경우에는 윌리엄 Pursell에 의해 지적은 다음과 같습니다

some_command 2>&1 | perl -ne '$|=1; print localtime . ": [somme_command] $_"' >> /log.log &

가 나는 또한 유지하기 위해 STDOUTSTDERR 파일과 말에 &을 리디렉션 2>&1 추가 배경에 프로그램입니다.

감사합니다. 이 같은

답변

1

의견 감안할 때, 여러 프로세스가 동시에 파일에 쓰고 싶은, 그리고 타임 스탬프가 보인다 각 개별 라인에. 이런 식으로 뭔가 충분 있습니다

some_cmd | perl -ne '$|=1; print localtime . ": [some_cmd] $_"' >> logfile 

당신의 strftime에게 :: POSIX를 사용하여 날짜의 형식을 마사지 할 경우

some_cmd | perl -MPOSIX -ne 'BEGIN{ $|=1 } 
    print strftime("%Y-%m-%d %H:%M:%S", localtime) . " [some_cmd] $_"' >> logfile 
+0

작품 잘! 정말 고맙습니다! ;) – TCB13

+0

사실 두 번째 명령을 실행하면 실제로는 제대로 작동하지 않습니다. 팁? : S – TCB13

+0

비동기식으로 실행하고 있습니까? (예 :'&'로) 어떻게 작동하지 않는지 어떻게 결정합니까? 아마도 버퍼링 문제 일 수도 있지만 괜찮습니다. –

1

뭔가 :

(echo -n $(date); echo -n " ls => "; ls) >> /tmp/log 

그러나, 명령 출력은 여러 줄이고 그것을 당신이 보여주고있다 위의 형식이 없습니다. 이 경우 tr 나 sed와 같은 명령으로 다른 문자로 출력의 개행 문자를 대체 할 수 있습니다.

2

sed를 사용하여 대체 솔루션은 다음과 같습니다

some_command 2>&1 | sed "s/^/`date '+%Y-%m-%d %H:%M:%S'`: [some_command] /" >> log.log & 

줄 "문자"(^)의 시작 부분을 바꿈으로써 작동합니다. Perl에 의존하고 싶지 않으면 편리 할 것입니다. 우분투에

1

:

sudo apt-get install moreutils 
echo "cat" | ts 
Mar 26 09:43:00 cat 
관련 문제