传统外壳的工作草案:
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
现在我们可以将屏幕显示为一个文件。需要须藤。
id=${ttyid//\/dev\/tty}
sudo cat /dev/vcs$id > screen.dump
Apropos screendump
:这样命名的程序对我不再有用。也许仅适用于较早的内核。/ dev / pts / N也不适合我。也许您必须在/ dev中使用一些可选的MKDEV-我对某些内容有些晦涩/dev/cuaN
,但我可能是错的。
我们希望通过管道传递输出,而不是使用screen.dump。但是它不起作用-有时它等待ENTER。
捕获不是带有换行符的普通文本文件,而是-例如-一个序列中包含80x50个字符。
要选择最后两行,请为命令输出选择1行,并为提示行选择一条,我将其还原,选择160个字符,再次还原并选择80。
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
以防万一您想知道为什么要有一个rev
程序。
批判:
- 输入第一个命令,从而移动行。好吧-只是一项数字练习就可以选择倒数第三名。我主要在不同的窗口中工作。
- 并非每个人都有80x50的屏幕。好吧,是的,我们知道。有$ COLUMNS和$ ROWS为您提供乐趣。
- 输出并非始终位于底部。新鲜和年轻的贝壳可能在上面的行中。好吧-就这么简单:评估正在运行的Shell。使用哪个提示。进行一些及时的检测,并找到带有shell提示符的最后一行。之前(或2.之前)的行应包含目录。
第一张图是用explain.py制作的