Робочий проект для традиційної оболонки:
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
Пропозиція screendump
: так названа програма для мене більше не працює. Можливо, лише для старих ядер. / dev / pts / N теж не працював для мене. Можливо, у вас є якийсь факультативний MKDEV в / dev - я пам'ятаю про деяких /dev/cuaN
, але я можу помилятися.
Ми хотіли б передавати вихід, а не використовувати screen.dump. Але якось це не працює - іноді він чекає ENTER.
Захоплення не є звичайним текстовим файлом із стрічками рядків, але, наприклад, з 80x50 символами в одній послідовності.
Щоб вибрати останні два рядки, 1 для виведення команди та один для рядка-підказки, я повертаю його, вибираю 160 символів, знову повертаю і вибираю 80.
rev vcs4.dat | sed 's/\(.\{160\}\).*/\1/g' | rev | sed 's/\(.\{80\}\).*/\1/g'
Про всяк випадок, коли ви коли-небудь замислювалися, навіщо існує rev
програма.
Критика:
- Перші команди вводяться, таким чином переміщуючи рядок ahed. Ну - просто числовий вправа, щоб вибрати третій-останній рядок чи щось таке. Я працював переважно в іншому вікні.
- Не всі мають екран 80х50. Ну так, ми знаємо. Для вашого задоволення є $ COLUMNS та $ ROWS.
- Вихід не завжди внизу. Свіжа і молода шкаралупа може бути у верхніх рядах. Ну - просто так: Оцініть, яка оболонка працює. Який підказок використовується. Здійсніть деяке оперативне виявлення та знайдіть останній рядок із оболонкою-оболонкою. Рядок перед (або 2. перед) повинен містити каталог.
Перша схема робиться за допомогою обяснения.py