전통적인 쉘을위한 작업 초안 :
ttyid=$(readlink /proc/$$/fd/1)
\___/ \______/ \___/ | | |
| | | | | \- 0: stdin
| | | | | 1: stdout <- our interest
| | | | | 2: stderr
| | | | \- fd is, maybe, filedescriptor
| | | |
| | | \- $$ is the PID of the current process (shell,
| | | in our case)
| | |
| | \- you know, much runtime stuff is here
| |
| \- readlink extracts the symbolic link of /proc/$$/fd/1
| lrwx------ 1 stefan stefan 64 2011-03-18 09:11
| /proc/22159/fd/1 -> /dev/pts/4
|
\- /dev/tty3 for real shell, /dev/pts/3 for xterm
이제 화면을 파일로 분류 할 수 있습니다. sudo가 필요합니다.
id=${ttyid//\/dev\/tty}
sudo cat /dev/vcs$id > screen.dump
Apropos screendump
: 그래서 명명 된 프로그램은 더 이상 작동하지 않습니다. 이전 커널에만 해당 될 수 있습니다. / dev / pts / N도 저에게 효과가 없었습니다. 어쩌면 당신은 / dev에서 MKDEV를 선택해야 할 /dev/cuaN
수도 있습니다.
screen.dump를 사용하는 대신 출력을 파이프하고 싶습니다. 그러나 어떻게 든 작동하지 않습니다. 때로는 ENTER를 기다립니다.
캡처는 줄 바꿈이있는 일반적인 텍스트 파일이 아니지만 한 번에 80x50 문자가 포함됩니다.
마지막 두 줄, 명령 출력 하나, 프롬프트 줄 하나를 선택하려면 되돌리고 160자를 선택한 다음 다시 되돌리고 80을 선택합니다.
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
궁금한 점이 있으시면 왜 rev
프로그램 이 있습니까 ?
비평:
- 첫 번째 명령이 입력되어 선이 움직입니다. 글쎄-세 번째 마지막 줄이나 무언가를 선택하기위한 숫자 운동. 나는 주로 다른 창에서 일했습니다.
- 모든 사람에게 80x50 화면이있는 것은 아닙니다. 예, 우리는 알고 있습니다. 당신의 즐거움을 위해 $ COLUMNS와 $ ROWS가 있습니다.
- 출력이 항상 맨 아래에있는 것은 아닙니다. 신선하고 어린 껍질이 윗줄에있을 수 있습니다. 글쎄-간단합니다 : 실행중인 쉘을 평가하십시오. 어떤 프롬프트가 사용됩니까? 프롬프트를 감지하고 쉘 프롬프트가있는 마지막 행을 찾으십시오. before (또는 2. before) 줄은 디렉토리를 포함해야합니다.
첫 번째 다이어그램은 Explain.py 로 만들어집니다.