Zapisz wyjście" screen " (program) do pliku

Muszę zapisać całe wyjście screen do pliku, aby później sprawdzić całą zawartość. Powodem jest to, że wyrzucam Pamięć flash poprzez port szeregowy, używając ekranu do interfejsu z nim. Chciałbym zapisać go do pliku, aby sprawdzić strukturę pamięci.

Próbowałem:

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

I próbowałem również użyć bufferfile z ekranu, ale nie rozumiem, jak go używać.

Czy jest jakiś łatwy sposób?
Author: Pete, 2013-01-08

9 answers

Istnieje opcja wiersza poleceń do logowania. Wyjście jest zapisywane w screenlog.plik n, gdzie n jest liczbą ekranu. Ze stron podręcznika ekranowego:

' - L ' powiedz ekranowi, aby włączył automatyczne rejestrowanie wyjścia dla systemu windows.

 80
Author: Fergie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-06 14:46:50

Możesz również użyć Control-A + H, aby zapisać logowania do screenlog.plik N. Jeszcze jedno sterowanie-a + H, aby wyłączyć.

C-A H: rozpoczyna / kończy logowanie bieżącego okna do pliku " screenlog.n".

 84
Author: NeliJ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-22 07:05:24

Dla terminala mac:

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

Szczegóły

  • W przeciwieństwie do innych terminali terminalowych, terminale terminalowe nie mogą być używane w terminalach terminalowych.]}
  • -a dołączenie do pliku wyjściowego
  • -t 0 Czas pomiędzy zapisem do pliku wyjściowego wynosi 0 sekund, więc nie.txt jest aktualizowany dla każdego nowego znaku
  • out.txt jest tylko nazwą pliku wyjściowego
  • screen /dev/ttyUSB0 115200 - polecenie z Pytania do podłączenia do urządzenia zewnętrznego

Możesz użyć tail, aby zobaczyć, że plik jest aktualizowany

Ogon -100 out.txt

 9
Author: ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 04:50:01

Wybrana odpowiedź nie działa zbyt dobrze przy wielu sesjach i nie pozwala określić niestandardowej nazwy pliku dziennika.

Dla wielu sesji ekranowych, oto mój wzór:

1) Utwórz plik konfiguracyjny dla każdego procesu:

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

Jeśli chcesz to zrobić" w locie", możesz zmienić logfile automatycznie. \012 oznacza "nowy wiersz", ponieważ użycie \n wydrukuje go w pliku dziennika: source.

2) Uruchom polecenie z "- c " i " - L" flagi:

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

To jest to. Zobaczysz "test.log " po pierwszym spłukaniu:

...
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 ]
...

Odkryłem, że "- L " jest nadal wymagane nawet, gdy w pliku konfiguracyjnym znajduje się "log on".

Nie mogłem znaleźć listy zmiennych formatu czasu (takich jak %m) używanych przez screen. Jeśli masz link do tych formatów, zamieść go poniżej.

** EXTRA * *

Jeśli chcesz to zrobić "w locie", możesz użyć tego skryptu:

#!/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

Aby go użyć, Zapisz (screen.sh) i set + x uprawnienia:

./screen.sh TEST ./test.pl

... i wykona. /test.pl i utworzyć plik dziennika w /var / log / TEST.log

 9
Author: lepe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-01 04:49:01

Ctrl + a Następnie Shift + H działa dla mnie. Możesz wyświetlić plik screenlog.0, gdy program jest nadal uruchomiony.

 5
Author: jaggedsoft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-18 03:20:30

Poniższe polecenie działa dla wersji screen 4.06.02

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

Ze strony podręcznika ekranowego:

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

Możesz sprawdzić istniejącą wersję screen używając screen-version. Możesz pobrać i zainstalować najnowszą wersję screen z https://www.gnu.org/software/screen/.

 5
Author: Nikhil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-05 00:05:31

Polecenie 'script' pod Uniksem powinno załatwić sprawę. Po prostu uruchom go na początku nowej konsoli i powinieneś być dobry.

 4
Author: Ruben,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-08 04:05:43

Przydatne mogą być następujące (testowane na: Linux/Ubuntu 12.04):

cat /dev/ttyUSB0

Korzystając z powyższego, możesz wykonać wszystkie potrzebne przekierowania. Na przykład, aby zrzucić dane wyjściowe do konsoli podczas zapisywania do pliku, wykonaj:

cat /dev/ttyUSB0 | tee console.log
 3
Author: Keo Malope,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-13 23:33:53

Oto sztuczka: zawiń to w sh -c!

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

Gdzie 2>&1 przekierowuje stderr na stdout, dzięki czemu {[3] } może przechwytywać i rejestrować komunikaty o błędach.

 0
Author: rkok,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-13 08:48:50