Использование script и scriptreplay






Часто ли вам приходится консультировать знакомых, которые используют в своей работе Unix-like операционную систему? Если да, то я уверен, что вам знакомо ощущение «знать — знаю, а выразить словами — никак». Хорошо, если есть возможность использовать TeamViewer или что-то подобное для оказания удалённой помощи пострадавшему. Но такая возможность есть не всегда, а инструкции по телефону «нажми туда, зайди сюда» иногда нарываются на стену либо непонимания с той стороны, либо на ваши скромные способности учителя.

Если вы попали в ситуацию, когда проще показать, чем объяснить, а из средств связи есть только нечто файлообменное, вроде электронной почты, то вам непременно сможет помочь интересная утилита, позволяющая записывать всё, что вы вводите в терминале, в файл, который затем можно в буквальном смысле воспроизвести когда угодно.

Да, эта утилита может работать лишь с терминалом и записывать пируэты вашего указателя мыши она, к сожалению, не умеет, однако довольно часто как раз движения мышью даются новичкам легче, чем ввод «магических» команд в окне терминала. Итак, знакомьтесь: сладкая парочка script и scriptreplay.


Перед тем, как вы начнёте записывать свою демонстрацию, необходимо лишь запустить утилиту script, которая запустит для вас отдельный bash (или что там у вас объявлено в переменной окружения ${SHELL}) и будет кропотливо записывать всё, что вы вводите. После завершения действий, которые вы хотите записать, достаточно завершить сеанс работы с оболочкой (как правило, Ctrl+D) и вы обнаружите созданный в текущем каталоге файл с именем typescript, который и будет содержать всю историю ваших действий, включая управляющие символы. Если вы хотите, чтобы файл протокола создавался где-то в другом месте, просто передайте путь к файлу в качестве параметра утилите script. Например:

$ script ~/tmp/mytypescript
Script started, file is /home/ashep/tmp/mytypescript
# здесь вводите свои команды #
...
# здесь вводите свои команды #
$ Ctrl+D
Script done, file is /home/ashep/tmp/mytypescript

Теперь, если открыть файл ~/tmp/mytypescript, можно увидеть в нём подробную запись всех ваших действий. Иногда очень удобно и полезно. Однако, если вы хотите, чтобы все сделанные вами действия можно было воспроизвести, необходимо слегка видоизменить запуск script.

Дело в том, что для воспроизведения «сценария», записанного при помощи script, используется другая утилита — scriptreplay, которая требует для воспроизведения дополнительной информации, так называемого тайминг-файла. В этом файле отмечены штампы времени, в которые выполнялись те ли иные действия. Наличие такой информации даёт возможность scriptreplay в буквальном смысле воспроизводить записанное в реальном времени.

Чтобы получить от script информацию о таймштампах, необходимо передать ей флаг -t, который заставит утилиту выводить в стандартный поток ошибок нужную информацию. Таким образом, запуск script будет выглядеть примерно так:

$ script -t ~/tmp/mytypescript 2>~/tmp/timefile
Script started, file is /home/ashep/tmp/mytypescript
# здесь вводите свои команды #
...
# здесь вводите свои команды #
$ Ctrl+D
Script done, file is /home/ashep/tmp/mytypescript

В итоге у вас получится два файла: один с протоколом работы, а второй с отметками времени, в которые записанные действия выполнялись.

Теперь, чтобы проиграть получившийся сценарий, достаточно запустить scriptreplay, передав ей в качестве параметров пути к тайминг-файлу и файлу скрипта ваших действий:

$ scriptreplay ~/tmp/timefile ~/tmp/mytypescript

Вуаля! Сидим и наслаждаемся, как «оно само» живёт и выполняет работу. Отличная штуковина для того, чтобы наглядно демонстрировать то, что словами иной раз не передать!