대화형 명령줄 프로그램의 출력을 기록하려고 합니다.units
, 구체적으로.
나는 tee
다음과 같이 사용해 보았습니다.
units | tee units.log
또는 다음과 같은 스크립트:
script -c units units.log
그러나 둘 다 다음과 같이 모든 백스페이스와 탭 완성을 특수 문자로 기록합니다.
You have: 55 horsepower ^G/^H^[[K^M
You want: wat^Gt ^M
* 41013.493^M
/ 2.438222e-05^M
맨페이지에 script
이 문제가 언급되어 있습니다.
실수
스크립트는 줄 바꿈 및 백스페이스를 포함하여 모든 것을 로그 파일에 넣습니다. 이것은 순진한 사용자가 기대하는 것이 아닙니다.
아래 설명된 대로 이스케이프 문자를 사용 cat
하거나 제거하여 more
파일을 보는 해결 방법을 알고 있습니다 .col
Perl 스크립트는 다음과 같습니다.
http://log.guidoderosa.net/2009/05/another-old-post-which-may-be-useful.html
그러나 나는 특별히 기존 로그 파일을 수정하고 싶지 않습니다. 삭제된 입력 및 제어 문자로 왜곡된 새 로그 파일을 생성하는 것을 피하고 싶습니다.
readline을 사용하여 문제를 해결했다고 생각했는데 readline 기능과 충돌 rlwrap
하여 units
출력을 캡처하지 못하거나 출력을 캡처하지만 rlwrap -a
탭 완성 기능을 무효화합니다. 도움이 안돼. 이것은 매뉴얼 페이지에 잘 설명되어 있습니다:units
rlwrap -a -N
버그 및 제한 사항
rlwrap은 유연하고, 제품(readline 기능)을 전달하고, Unix의 "많은 작은 도구" 패러다임을 따르지만 이는 패치워크입니다. 명령의 내부 상태에 대해 아무것도 배울 수 없으므로 상황에 맞는 완성이 불가능합니다. 명령에서 readline 라이브러리를 사용하는 것이 여전히 최선의 선택입니다.
기존 기능을 방해하지 않고 대화형 입력 및 출력을 깔끔하게 기록할 수 있는 방법이 있습니까 readline
?
업데이트: 비슷한 것이 있으면 좋겠습니다.
units | col -b | tee units.log
그러나 대화형 입력을 기다리는 동안 중단됩니다. 이 문제가 해결될 수 있습니까?
답변1
GNU Units는 최근 버전 2.10에 이 기능을 추가했습니다.
이
--log
옵션을 사용하면 계산 결과를 파일에 저장할 수 있습니다. 이는 작업을 영구적으로 기록해야 하는 경우 유용합니다.
https://www.gnu.org/software/units/manual/units.html#Logging-계산