Могу ли я сохранить вывод из предыдущей команды терминала, используя только клавиатуру?


12

Я только что провел последние два часа, выполняя ddкоманду (или представлял любой подобный сценарий «трудно сделать заново») с живого CD без графического интерфейса; все, что у меня есть, это мой верный CTRL+ALT+F#терминал «многооконный» ( ) Bash.

Увы, во время выполнения команды ddвывалилось несколько неприятных сообщений об ошибках и еще немного информации, которую я хотел бы сохранить. У меня подключен USB-накопитель, на который я могу записывать данные, но как мне сохранить предыдущий вывод, сохраненный в виде текстового файла после того, как команда уже выполнена?

Если бы это был эмулятор терминала в хорошем графическом интерфейсе, я бы просто использовал мышь, чтобы выделить текст, скопировать его и вставить в документ. И если бы я знал, что команда выдаст ошибки, я бы сначала отправил ее в файл, но, увы, дополнительный вывод оказался неожиданным.

Как сохранить вывод текста из моей предыдущей команды в файл без повторного запуска команды? Это вообще возможно?


Я искал способы выделения текста на экране, но пока я только нахожу способы сделать это, используя текст, который вы ввели в подсказку.
IQAndreas

Вы пробовали использовать перенаправление вывода?
eyoung100

2
@ eyoung100 Это еще одно слово для "трубопровода"? Как в dd if=/dev/sda of=/backups/sda.img > result.txt. Если это так, проблема в том, что я уже выполнил ddкоманду . Любой ценой я хочу избежать повторного запуска команды, что в некоторых ситуациях невозможно.
IQAndreas

2
Предполагая, что это Linux: установите gpm . (Запустите его, если необходимо, например service start gpm). Смести область, удерживая левую кнопку мыши. Введите cat > outputfileи щелкните правой кнопкой мыши, чтобы вставить регион, который вы только что выбрали.
Марк Плотник

1
Если цель состоит исключительно в том, чтобы «хранить ... []] информацию», в крайнем случае, нужно взять камеру и сфотографировать экран. (И, теоретически, вы можете запустить OCR на этом.)
Скотт

Ответы:


15

Ядро linux должно хранить экранный журнал для ваших vts на соответствующем /dev/vcsa*[ttynum]устройстве.

Вот почему работает следующее:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2

... который печатает ...

hey       

Соответствующее /dev/vcsa[ttynum]устройство будет хранить закодированную версию форматированного текста на экране, тогда как это /dev/vcs[ttynum]будет простой дамп. Эти vcsa[ttynum]устройства будут кодировать пару байтов , которые описывают каждый экранный символ и его атрибуты, а также строку во главе каждой логической страницы , которая указывает ссылочного TTY по линии, столбцы сосчитать.

Как указывает @kasperd, раньше я ошибался, предполагая, что \aBEL кодируется между каждым символом, хотя на самом деле: цветовая комбинация по умолчанию совпадает с символом колокольчика.

Для ваших целей использовать, /dev/vcs[ttynum]вероятно, проще всего. Вот lOok на различия:

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcs2 |
sed -n l

... печать ...

hey       $

...и...

echo hey >/dev/tty2
dd bs=10 count=1 </dev/vcsa2 |
sed -n l

... печать ...

0\200\000\004h\ae\ay\a$

1
vcsaне помещает один и тот же символ между всеми символами. Он дает вам пары байтов, сообщающих вам, какой символ находится на экране и какой у него цвет. Цветовая комбинация по умолчанию совпадает с символом колокольчика.
Касперд

@kasperd - спасибо. Это лучше?
mikeserv

Так-то лучше. 👍
Касперд

2

Перейдите (/ войдите в систему) к другому терминалу и запустите sudo screendump N > screenoutput.txt, где Nномер нужного вам терминала.

Боюсь, без отставания. Если у этих виртуальных консолей есть одна, я никогда ее не видел. Но это дает вам все, что вы можете увидеть на этом терминале.


если он работает, то, вероятно, потому, что он захватывает его /dev/vcsa*[1-9]*- (что, я думаю, для прав суперпользователя) . Я думаю, что консоли Linux поддерживали отставание для большинства серий 3. *. Я не уверен, как можно это схватить (в отличие от использования /dev/vcsa*[1-9]*устройств), но, возможно, есть способ.
mikeserv

Лучше не переключаться на другую консоль, так как переключение стирает отставание, сохраняя только то, что в данный момент видно на экране.
Жиль "ТАК - перестань быть злым"

@mikeserv Да. Ну, страница руководства, кажется, говорит, что использует оба /dev/vcs$i и /dev/vcsa$i. Это дает читаемый результат, хотя. ;-)
Сидхекин

@ Жиль А, так что есть отставание? Но screendumpне доходит до этого, даже если я остаюсь в той же консоли.
Сидхекин

1
Вы можете увидеть прокрутку, набрав Shift-PageUp один или несколько раз. Я не знаю способа перехвата текста в прокрутке, кроме как с помощью мыши через gpm.
Марк Плотник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.