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?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.
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".
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
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
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.
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/.
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.
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
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.
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