Geleneksel bir kabuk için çalışan bir taslak:
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
Şimdi ekranı bir dosyaya çevirebiliriz. Sudo gerekiyor.
id=${ttyid//\/dev\/tty}
sudo cat /dev/vcs$id > screen.dump
Apropos screendump
: Yani adlandırılmış program artık benim için çalışmıyor. Belki sadece daha yaşlı çekirdekler için. / dev / pts / N de benim için işe yaramadı. Belki de / dev içindeki bazı isteğe bağlı MKDEV'lere mecbursunuz - bazılarını karanlık olarak hatırlıyorum /dev/cuaN
, ancak hatalı olabilirim.
Screen.dump kullanmak yerine çıktıyı borulamak istiyoruz. Ama bir şekilde işe yaramıyor - bazen ENTER için bekler.
Yakalama, satır beslemeli normal bir metin dosyası değil, - örneğin - bir sırayla - 80x50 karakter ile.
Son 2 satırı, komutun çıktısı için 1, komut satırı için bir tane seçmek için, onu geri döndürürüm, 160 karakter seçer, tekrar döndürür ve 80'i seçerim.
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
Merak ettin de, neden bir rev
program var?
Eleştiri:
- İlk komutlar girilir, böylece çizgi ahed hareket ettirilir. Şey - sadece sonuncu çizgiyi seçmek için yapılan sayısal bir alıştırma. Genelde farklı bir pencerede çalıştım.
- Herkes 80x50 ekrana sahip değildir. Evet, biliyoruz. Zevkiniz için $ COLUMNS ve $ ROWS var.
- Çıktı daima altta değil. Taze ve genç bir kabuk üst sıralarda olabilir. Peki - bu kadar basit: Hangi kabuğun çalıştığını değerlendirin. Hangi istemi kullanılır. İstemi algılamayı yapın ve bir kabaca istemi olan son satırı bulun. Önündeki satır (veya önceki 2.) dizini içermelidir.
İlk diyagram açıkla.py ile yapıldı.