Intereting Posts
Почему интерактивные оболочки на OSX-входах по умолчанию? ZSH: `ls * (.)` Перечисляет только обычные файлы, но `ls * (/)` не перечисляет только каталоги Dracut не находит корневое устройство Перемещение по пробельному разделительному слову в bash / readline Как добавить дополнительные шаги для входа? перемещаемая схема не вызывает изменений в панели Gnome Часто ли выполнять сбор данных для выполнения длительной команды? разрешить только определенным пользователям входить в систему через sshd, но отказывать в подключении к пользователям, не включенным в список $ 1 означает …? без ввода? Может apt обновить пакет, но только если он уже установлен? Force nautilus desktop для открытия файлов с другим файловым менеджером Возможно ли обновить руководства для MacOS? Построить полное Distro с LFS Как определить, что это за сетевой интерфейс и почему он блокирует меня из подсети? Настройка Multi-Workstation – как эффективно использовать мою систему

Преобразование журнала экрана в html

Я хотел бы регистрировать действия, сделанные в окне терминала, и конвертировать журнал в html на лету.

Я уже пробовал команды script / screen + ansi2html , но результат не идеальный: escape-последовательности для редактирования строк обрабатываются неправильно, поэтому в полученном html у меня есть смесь для старой и новой версии строки. Поэтому, если вывод терминала подобен

$> echo Original text Original text $> echo Other Other 

Получающийся html

  $> echo Исходный текст
  Оригинальный текст
  $> echo Othernal text
  Другие

Любая идея, как решить проблему?

Проблема заключается не в вашем Perl-скрипте (который должен быть ненужным), а ansi2html который является неполным.

Файл журнала показывает, что что-то напечатало какой-то текст, а затем

  • неоднократно добавлял escape-последовательность для очистки оставшейся части линии \E[K
  • поочередно добавляя обратное пространство.

В ansi2html скрипт находит escape-последовательности и затем игнорирует все, кроме нескольких из найденных, т. ansi2html

self.ansi_codes_prog = re.compile('\033\\\[' '(\[\\d;\]*)' '(\[a-zA-z\])')

if command not in 'mMA':

Избавление от повторяющихся материалов проще всего в цикле. Вот альтернативный скрипт, который работает вокруг проблем, наблюдаемых в ansi2html для вашего примера:

 #!/usr/bin/perl -w while (<>) { my $save = ""; while ( $save ne $_ ) { $save = $_; s/[^\010]\010\e\[K//; } $save = ""; while ( $save ne $_ ) { $save = $_; s/[^\010]\010//; } s/\e\[\?[;0-9]*[\100-\176]//g; s/\e\][^\a]*\a//g; print; } 

и (вызывая этот filterit ), используйте его следующим образом:

 ./filterit < 1.log | ansi2html >1.html