나는 내 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 초 샘플링하는 더 좋은 방법이 있습니까?
N 번째 줄마다 타임 스탬프를 추가하고 104 초의 데이터를 기록한 다음 몇 가지 유틸리티를 사용하여 20-21 청크로 분할해야하는 이유는 무엇입니까? –
만약'jobs -l; 'serialPID = $!'다음에 echo $ serialPID'를 실행하면 PID가 일치합니까? –
@lpthnc 나는 명령을 내릴 수있는 명령이 1에서 200 개이며 그 명령 중 하나가 푸시 - 팝 스택에 명령을 더 추가 할 수 있으므로 한 번에 하나의 명령 만 처리하려고합니다. 스크립트는 또한 상자를 작동하고 테스트중인 명령을 자동으로 실행합니다. 나는 "기록 시작 - 명령 실행 - 기록 중지 - 통계를위한 grep"알고리즘을 유지하고 싶습니다. – pica