Поиск по сайту:

Как записывать команды терминала Linux с помощью «сценария»


Команда script позволяет записывать и воспроизводить действия в вашем терминале. Это полезно, когда вы хотите создать ссылку на шаги, которые вы предприняли, или вы создаете учебник для других.

script выводит машинописный текст всех запущенных вами команд. Он работает, помещая вас во вспомогательную оболочку, которая регистрирует все, что вы выполняете. Ваш сеанс будет сохранен как обычный текст, когда вы покинете оболочку. Это делает script более надежным, чем перенаправленные входные потоки.

Основное использование

Команду script можно запустить без аргументов:

script

Начнется новый сеанс захвата. Ваш терминальный сеанс будет сохранен в ./typescript в вашем рабочем каталоге. Вы можете указать другой файл, указав аргумент script:

script example_session

Используйте вашу оболочку для выполнения последовательности команд, которую вы хотите записать. Когда вы закончите, нажмите Ctrl+D или введите exit, чтобы выйти из подоболочки. Вы вернетесь к своему основному сеансу оболочки.

Теперь вы можете проверить журнал сеанса, который был создан:

cat example_session

Вы увидите вывод сеанса script с вкраплениями аннотаций в квадратных скобках. Эти аннотации используются script для записи сведений о самом терминале и происходящих в нем событиях.

Поскольку файлы журналов представляют собой обычный текст, вы можете свободно манипулировать ими в своем любимом редакторе. Просто вырежьте все строки, которые вы не хотите сохранять или которые другие не должны видеть.

Это полезно, если ваш сеанс непреднамеренно выводит потенциально конфиденциальную информацию или вы хотите удалить посторонние символы из журнала. script записывает все, что происходит в вашем терминале, включая нажатия на клавишу Backspace, новые строки и управляющие символы, некоторые из которых могут не понадобиться в окончательном машинописном тексте.

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

Переменная среды SHELL считывается при определении оболочки для разветвления внутреннего процесса. Если переменная не установлена, script по умолчанию будет sh.

Добавление к существующему файлу

Можно добавлять новые команды к существующему машинописному тексту. Это позволяет вам «приостанавливать» и «возобновлять» запись, выходя из вашей подоболочки и начиная новый сеанс.

Добавьте флаг -a, чтобы добавить свои команды в указанный файл. script перезапишет содержимое файла, если флаг не указан.

script -a example_session

Добавление данных синхронизации

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

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

script -q -t example_session_timings example_session

Воспроизведение сеансов

Команда scriptreplay считывает машинописные тексты и файлы синхронизации, созданные с помощью script. Он воспроизводит их вывод в ваш терминал. Данные синхронизации будут использоваться для сопоставления продолжительности каждого введенного символа с его длиной в исходной последовательности команд.

scriptreplay -t example_session_timings example_session

Некоторые машинописные тексты могут содержать нежелательные задержки или выполняться с неудобно низкой скоростью. Используйте флаг -d для ускорения вывода. Все записанные тайминги будут разделены на число, которое вы пройдете.

# Run 4 times faster
scriptreplay -d 4 -t timings typescript

Вы также можете использовать флаг -m, чтобы ограничить максимальную задержку между отдельными обновлениями. Это позволяет указать максимально допустимую паузу в секундах, прежде чем scriptreplay перейдет к следующей команде, даже если в машинописном тексте указана более длительная задержка.

# Maximum delay of 2 seconds
scriptreplay -m 2 -t timings typescript

Использование с интерактивными командами

Не рекомендуется использовать script с сильно интерактивными командами. Текстовые редакторы терминала, приложения на основе curses и диалоговые подсказки могут вставлять в машинописный текст загрязняющие символы. script фокусируется на захвате типичного текстового вывода, а не на командах, которые манипулируют вашим терминалом для создания графического интерфейса.

script не подходит для использования с неинтерактивными оболочками, поскольку его внутренняя оболочка всегда интерактивна по своей природе. Также не следует ожидать, что команда будет работать с конвейерным вводом.

Другие варианты

Флаг -c для script позволяет указать команду. Когда используется этот режим, script запускает команду и фиксирует ее вывод вместо создания новой интерактивной оболочки. Это может быть более эффективным при захвате выходных данных некоторых процессов, которые ведут себя по-разному, если не подключены напрямую к TTY.

Флаг -f указывает script писать сразу в журнал сеанса после каждого события. Это повышает безопасность, обеспечивая немедленный захват выходных данных.

Страница руководства script предполагает, что этот флаг также можно использовать для мониторинга пользовательского терминала в режиме реального времени, например, в сценарии учителя и ученика. Учащийся запускал script -f, затем учитель использовал SSH для подключения и потоковой передачи машинописного файла в реальном времени.

script обычно не принимает символическую ссылку в качестве пути машинописного текста. Флаг --force включает это поведение, предписывая script разрешать жесткие и программные ссылки на их место назначения.

Краткое содержание

script позволяет записывать сеансы терминала в текстовые файлы с точными временными данными. Вы можете проверять, публиковать и распечатывать машинописные тексты вручную или воспроизводить их в своем терминале с помощью scriptreplay.

Команды включены в большинство популярных дистрибутивов Linux. Они работают со всеми типами терминалов, но отдельные машинописные тексты могут неправильно воспроизводиться на терминале, отличном от того, который используется для записи. Для достижения наилучших результатов запустите scriptreplay в том же типе терминала, который вы использовали с script.