Сохранить вывод экрана (программы) в файл

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

Я пробовал:

$: screen /dev/ttyUSB0 115200 >> foo.txt
$: screen /dev/ttyUSB0 115200 | tee foo.txt

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

Есть ли простой способ?

Ответ 1

Существует опция командной строки для ведения журнала. Выход сохраняется в файле screenlog.n, где n - номер экрана. Из экранных страниц человека:

'- L Введите экран, чтобы включить автоматическое ведение журнала вывода для окон.

Ответ 2

Вы также можете использовать Control-a + H для сохранения записей в файле screenlog.n. Еще один Control-a + H выключится.

C-a H: начинает/завершает ведение журнала текущего окна в файле "screenlog.n".

Ответ 3

для терминала mac:

script -a -t 0 out.txt screen /dev/ttyUSB0 115200 

подробнее

  • script встроенное приложение для создания typescript терминальной сессии
  • -a добавить в выходной файл
  • -t 0 время между записью в выходной файл составляет 0 секунд, поэтому out.txt обновляется для каждого нового char
  • out.txt - это только имя выходного файла
  • screen /dev/ttyUSB0 115200 - команда из вопроса для подключения к внешнему устройству

вы можете использовать хвост, чтобы увидеть, что файл обновляется

tail -100 out.txt

Ответ 4

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

Для нескольких сеансов экрана это моя формула:

1) создать файл конфигурации для каждого процесса:

logfile test.log
logfile flush 1
log on
logtstamp after 1
logtstamp string "[ %t: %Y-%m-%d %c:%s ]\012"
logtstamp on

Если вы хотите сделать это "на лету", вы можете изменить logfile автоматически. \012 означает "новая строка", так как \n напечатает ее в файле журнала: источник.

2) Запустите вашу команду с флагами "-c" и "-L":

screen -c ./test.conf -dmSL 'Test' ./test.pl

Это. Вы увидите "test.log" после первого сброса:

...
6 Something is happening...
[ test.pl: 2016-06-01 13:02:53 ]
7 Something else...
[ test.pl: 2016-06-01 13:02:54 ]
8 Nothing here
[ test.pl: 2016-06-01 13:02:55 ]
9 Something is happening...
[ test.pl: 2016-06-01 13:02:56 ]
10 Something else...
[ test.pl: 2016-06-01 13:02:57 ]
11 Nothing here
[ test.pl: 2016-06-01 13:02:58 ]
...

Я обнаружил, что "-L" по-прежнему требуется, даже если "log on" находится в файле конфигурации.

Я не смог найти список переменных формата времени (например,% m), используемых экраном. Если у вас есть ссылка на эти форматы, пожалуйста, опубликуйте ее ниже.

** ДОПОЛНИТЕЛЬНО **

Если вы хотите сделать это "на лету", вы можете использовать этот скрипт:

#!/bin/bash
if [[ $2 == "" ]]; then
    echo "Usage: $0 name command";
    exit 1;
fi
name=$1
command=$2
path="/var/log";
config="logfile ${path}/${name}.log
logfile flush 1
log on
logtstamp after 1
logtstamp string \"[ %t: %Y-%m-%d %c:%s ]\012\"
logtstamp on";
echo "$config" > /tmp/log.conf
screen -c /tmp/log.conf -dmSL "$name" $command
rm /tmp/log.conf

Чтобы использовать его, сохраните его (screen.sh) и установите разрешения +x:

./screen.sh TEST ./test.pl

... и выполнит. /test.pl и создаст файл журнала в /var/log/TEST.log

Ответ 5

Следующая команда работает для экранной версии 4.06.02

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

С man-страницы экрана:

-Logfile file : By default logfile name is "screenlog.0". 
                You can set new logfile name with the "-Logfile" option.

Вы можете проверить существующую версию экрана, используя экран -version. Вы можете скачать и установить последнюю версию экрана с https://www.gnu.org/software/screen/.

Ответ 6

Ctrl+A, тогда Shift+H работает для меня. Вы можете просмотреть файл screenlog.0, пока программа все еще работает.

Ответ 7

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

Ответ 8

Может оказаться полезным следующее (протестировано на: Linux/Ubuntu 12.04):

cat /dev/ttyUSB0

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

cat /dev/ttyUSB0 | tee console.log

Ответ 9

Вот хитрость: заверните в sh -c !

screen sh -c './some-script 2>&1 | tee mylog.log'

Где 2>&1 перенаправляет stderr в stdout, чтобы tee мог перехватывать и регистрировать сообщения об ошибках.

Ответ 10

Я прошу прощения. У меня недостаточно повторений, чтобы комментировать. Можно ли выполнить grep одновременно с сохранением данных в файле screenlog.n с помощью опции -L. Я хочу проверить наличие некоторых ключевых слов для выполнения некоторых действий.

Также как нам перестать сохранять данные в файл screenlog.n? Есть ли параметры командной строки, потому что я пытаюсь написать сценарий для этого? Я не ищу сочетания клавиш.

Спасибо