script
나는 이런 일을 할 수 있었으면 좋겠다 .
❯ script --user=call.log --prog=response.log
Script started
❯ echo foo
foo
❯ exit
Script done
❯ cat call.log
echo foo
❯ cat response.log
foo
그렇지 않아서 대안을 찾고 있습니다.
실제 출력을 보면 script
다음이 표시됩니다.
^M^[[35m❯ ^[[Ke^Hecho foo#[[?1l^[>^?2004l^M^M
^[]0;tmp: echo foo^Gfoo^M
나는 내가 원하는 것을 추출하기 위해 파서를 작성하는 것을 고려했습니다. 그러나 이것은 특히 사용자의 쉘 구성에 의존하는 것처럼 보이기 때문에 취약해 보입니다.
세션 시작 및 종료를 별도로 기록하는 더 좋은 방법이 있습니까?
답변1
다양한 애플리케이션의 내부를 이해하지 못하면 터미널 드라이버(애플리케이션을 대신하여)가 어떤 문자를 반향하는지, 어떤 문자가 특정 애플리케이션에서 출력되는지 알 수 없습니다.
나는 사용한다script
출력 캡처명령줄귀하의 예와 같은 애플리케이션을 만든 다음 스크립트를 사용하여 이스케이프 시퀀스를 필터링합니다(예:Unix 유틸리티를 사용하여 프로그래밍 방식으로 ANSI 제어 코드를 파일에 "구울" 수 있습니까?).
이는 편집자와 같은 전체 화면 응용 프로그램에서는 제대로 작동하지 않습니다. 왜냐하면 커서가 화면을 가로질러 이동하고 텍스트를 업데이트할 때 어떤 일이 발생하는지 명확하게 보여주지 않기 때문입니다. 이러한 목적을 위해서는 (일반적으로) 세션을 슬로우 모션으로 재생하는 것으로 충분합니다(예:slowcat
).