2009-12-29 2 views
2

나는 내 PC 옆에서 작동하는 장치를 가지고 있으며, 실행되는 동안 직렬 포트를 통해 로그 라인이 침입한다. 나는이 내 PC에 유선 내가 사용하고 있다면 로그 라인을 잘 볼 수 있습니다 전무 또는 같은 : 나는 임시 파일에 장치 직렬 출력 5 초를 기록 할grep 쉘 스크립트 내부의 직렬 포트로부터 5 초의 입력.

ttylog -b 115200 -d /dev/ttyS0 

(또는 그것을 변수에 할당하십시오) 그리고 나중에 장치가 어떻게 작동하는지 알려주는 키워드에 대해 그 파일을 grep합니다. 배경에서 명령을 실행하는 동안 출력을 파일로 리디렉션하려고 시도한 다음 5 초 동안 대기하고 프로세스를 종료했지만 로그 라인이 절대로 임시 파일에 기록되지 않습니다. 예 :

touch tempFile 
ttylog -b 115200 -d /dev/ttyS0 >> tempFile & 
serialPID=$! 
sleep 5 
#kill ${serialPID} #does not work, gets wrong PID 
killall ttylog 
cat tempFile 

파일이 생성되었지만 전혀 채워지지 않았습니다. 나는 또한 함께 ttylog 라인을 대체 할 수있다 : 내가 내가 실수로 ttylog 실행의 여러 버전이 없으면 모든 로그 라인이 표준 출력 또는 로그 파일에 기록 보는가 어느 경우

ttylog -b 115200 -d /dev/ttyS0 |tee -a tempFile & 

을 (D 라인을 주석 참조 '오).

나는 여기서 무슨 일이 일어나는 지 잘 모릅니다. 내 스크립트에서 리디렉션이 실패한 것 같습니다.

올바른 경로에 있습니까? 직렬 포트를 5 초 샘플링하는 더 좋은 방법이 있습니까?

+0

N 번째 줄마다 타임 스탬프를 추가하고 104 초의 데이터를 기록한 다음 몇 가지 유틸리티를 사용하여 20-21 청크로 분할해야하는 이유는 무엇입니까? –

+0

만약'jobs -l; 'serialPID = $!'다음에 echo $ serialPID'를 실행하면 PID가 일치합니까? –

+0

@lpthnc 나는 명령을 내릴 수있는 명령이 1에서 200 개이며 그 명령 중 하나가 푸시 - 팝 스택에 명령을 더 추가 할 수 있으므로 한 번에 하나의 명령 만 처리하려고합니다. 스크립트는 또한 상자를 작동하고 테스트중인 명령을 자동으로 실행합니다. 나는 "기록 시작 - 명령 실행 - 기록 중지 - 통계를위한 grep"알고리즘을 유지하고 싶습니다. – pica

답변

3

아마도 ttylog가 출력을 버퍼링하는 것 같습니다. -f 또는 --flush로 실행 해 보셨습니까?

+0

-f는 ttylog에 대한 유효한 플래그가 아니거나 사용자의 질문을 이해할 수 없습니까? – pica

+0

나는 http://rocasa.org/ttylog –

+0

D' oh에서 출처를보고있었습니다. 'strings/usr/sbin/ttylog'는 사용 가능한 -f 옵션을 보여 주지만, 그것은 매뉴얼 페이지에 없습니다. 나는 그것을 시도 할 것이다. – pica

0

expect과 함께 제공되는 unbuffer 스크립트를 사용해보십시오.

+0

을 확인할 것입니다. 그것은 유망 해 보입니다. 그러나 David Norman이 제안한 -f 옵션에서 더 쉬운 해결책을 찾았습니다. – pica