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


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

Я пробовал :

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

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

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

9 75

9 ответов:

есть опция командной строки для регистрации. Выходные данные сохраняются в screenlog.N файл, где n-номер экрана. Из man-страниц экрана:

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

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

C-a H: начинается/заканчивается протоколирование текущего окна в файл "screenlog.северный."

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

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

подробности

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

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

хвост -100 наружу.txt

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

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

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

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

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

2) Начните команда с флагами"- c "и"- L":

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

вот и все. Вы увидите "тест.журнал " после первого смыва:

...
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" по-прежнему требуется, даже когда "вход в систему" находится в файле конфигурации.

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

* * EXTRA**

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

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

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

./screen.sh TEST ./test.pl

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

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

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

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

С главной страницы экрана:

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

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

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

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

cat /dev/ttyUSB0

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

cat /dev/ttyUSB0 | tee console.log

вот трюк: оберните его в sh -c!

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

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