이 script
명령을 사용하여 입력한 키 입력을 기록하거나 기록 모드를 활성화할 때 마다 screen
모든 BS(백스페이스) 및 ESC(esc 키) 키 입력도 파일에 포함됩니다. 예를 들어: cd ~/foo/tpBSBStmp
.
마지막으로 기록된 명령이 파일에 포함되도록 파일에서 BS 또는 ESC를 자동으로 제거하는 방법이 있습니까 cd ~/foo/tmp
?
그건 그렇고, 이는 Putty의 로깅 기능에서도 발생합니다.
나는 원하지 않는 문자를 제거하는 스크립트나 동일한 작업을 수행하는 다른 명령에도 열려 있습니다.
답변1
맨페이지에 설명된 대로 의 출력에는 script
항상 줄 바꿈, 백스페이스 및 ANSI 이스케이프 시퀀스가 포함됩니다. 이러한 모든 항목을 올바르게 표시할 수 있는 프로그램의 예는 cat
및 입니다 more
. 녹음할 때와 똑같은 타이프스크립트가 표시 cat typescript
됩니다 .more typescript
여전히 타이프스크립트를 정리하고 싶다면 살펴보세요.이것스크립트. 이것은 제가 얼마 전에 우연히 발견한 Perl 스크립트입니다. 특히 script
.
실행하여 사용해 보세요.script-declutter myTypescript > cleanTypescript
편집: 답변과 실제로 관련이 없지만 관심이 있을 수 있습니다.학기 기록. 터미널 세션에 대한 깔끔하고 독립적인 HTML 및 Javascript 표현을 생성하므로 누구나 TypeScript 작업 방법을 몰라도 이를 볼 수 있습니다. 그들에게 필요한 것은 웹 브라우저뿐입니다.
답변2
-vte
인수를 사용하면 cat
터미널 코드가 이스케이프됩니다.
예를 들어
cat -vte myfile
답변3
링크가 script-declutter
작동하지 않지만 다음 페이지에 표시됩니다.웹 페이지:
#!/usr/bin/perl -wp
# clean up control characters and other non-text detritus that shows up
# when you run the "script" command.
BEGIN {
# xterm titlebar escape sequence
$xtermesc = "\x1b\x5d\x30\x3b";
# the occurence of a backspace event (e.g. cntrl H, cntrol W, or cntrl U)
$backspaceevent = "\x1b\\\x5b\x4b"; # note escaping of third character
# ANSI color escape sequence
$ansiesc = qr/\x1b\[[\d;]*?m/;
# technically, this is arrow-right. For some reason, being used against
# very long backspace jobs. I don't fully understand this, as evidenced
# by the fact that is off by one sometimes.
$bizarrebs = qr/\x1b\[C/;
# used as part of the xterm titlebar mechanism, or when
# a bell sounds, which might happen when you backspace too much.
$bell = "\x07"; # could use \a
$cr = "\x0d"; # could use \r
$backspace = "\x08"; # could use \b
}
s/$xtermesc.+?$bell//g;
s/[$cr$bell]//g;
s/${backspaceevent}//g;
s/$ansiesc//g;
while (s/(.)(?=$backspace)//) { s/$backspace//; } # frickin' sweet
# For every ^H delete the character immediately left of it, then delete the ^H.
# Perl's RE's aren't R, so I wonder if I could do this in one expression.
while (s/(..)(?=$bizarrebs)//) { s/$bizarrebs//; }
# notes
# ^[[7P has been spotted. Based on http://www.google.com/codesearch/p?hl=en#4qbG402gtc0/myScreen.C&q="[7P" it appears to be a numbered cursor jump, moving 7 characters (not sure if left or right).
다른 예제보다 조금 더 복잡하지만 몇 가지 참고 사항이 순서대로 나와 있습니다.
- Bash 라인 편집에 사용되는 커서 왼쪽 이스케이프 시퀀스를 설명합니다(부분: 작성자는 텍스트에서 커서를 이동하는 실제 사용이 아니라 백스페이스 키와 동일한 방식으로 사용된다고 생각하는 것 같습니다).아니요수정됨).
yum
일정에 사용되는 포함된 캐리지 리턴은 고려되지 않습니다 .- 제거되는 이스케이프 시퀀스의 개념은 SGR 이스케이프(로 끝나는
m
)로 제한되며 무시됩니다.모델h
또는 로 끝납니다l
.
마지막 두 작업을 수행하지만 여전히 커서를 왼쪽으로 이동하지 않는 (더 짧은) 스크립트의 경우 이전 질문에 대한 내 답변을 참조하세요.
화면의 "부분"을 자주 업데이트하여 로그 파일을 복잡하게 만드는 콘솔 프로그램의 출력을 올바르게 기록하려면 어떻게 해야 합니까?