Un borrador de trabajo para una concha tradicional:
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
Ahora podemos pasar la pantalla a un archivo. Necesita sudo.
id=${ttyid//\/dev\/tty}
sudo cat /dev/vcs$id > screen.dump
A propósito screendump
: el llamado programa ya no funciona para mí. Tal vez solo para núcleos más antiguos. / dev / pts / N tampoco funcionó para mí. Tal vez tenga que usar algún MKDEV opcional en / dev. Recuerdo oscuramente algunos /dev/cuaN
, pero puedo estar equivocado.
Nos gustaría canalizar la salida en lugar de usar screen.dump. Pero de alguna manera no funciona, a veces espera ENTER.
La captura no es un archivo de texto normal con saltos de línea, sino con, por ejemplo, 80x50 caracteres en una secuencia.
Para elegir las últimas 2 líneas, 1 para la salida del comando y una para la línea de aviso, la revierto, escojo 160 caracteres, revierto nuevamente y escojo 80.
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
Por si alguna vez te has preguntado, ¿por qué hay un rev
programa?
Crítica:
- Se ingresan los primeros comandos, moviendo así la línea ahed. Bueno, solo un ejercicio numérico para elegir la 3ra última línea o algo así. Trabajé principalmente en una ventana diferente.
- No todos tienen una pantalla de 80x50. Pues sí, lo sabemos. Hay $ COLUMNS y $ ROWS para su placer.
- La salida no está siempre en la parte inferior. Una concha fresca y joven podría estar en las filas superiores. Bueno, así de simple: evalúa qué shell se está ejecutando. Qué aviso se utiliza. Realice una detección rápida y encuentre la última línea con un indicador de comandos de shell. La línea anterior (o 2. anterior) debe contener el directorio.
El primer diagrama está hecho con explicar.py