web-dev-qa-db-fra.com

Enregistrer "écran" (programme) sortie dans un fichier

Je dois enregistrer la sortie entière de screen dans un fichier pour vérifier plus tard tout le contenu.
La raison est que je vide un port série de mémoire flash, en utilisant l’écran pour l’interface.
Je voudrais le sauvegarder dans un fichier pour vérifier la structure de la mémoire. 

J'ai essayé : 

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

et j'ai aussi essayé d'utiliser le fichier tampon à partir de l'écran, mais je ne comprends pas comment l'utiliser. 

Y a-t-il un moyen facile?

83
Edoardoo

Il existe une option de ligne de commande pour la journalisation. La sortie est enregistrée dans le fichier screenlog.n, où n est le numéro de l'écran .

‘-L’ Indiquez à l’écran d’activer la journalisation automatique des sorties pour les fenêtres. 

92
Fergie

Vous pouvez également utiliser Control-a + H pour enregistrer les enregistrements dans le fichier screenlog.n . Un autre Control-a + H à désactiver.

C-a H: Commence/termine la journalisation de la fenêtre actuelle dans le fichier "screenlog.n".

89
NeliJ

La réponse sélectionnée ne fonctionne pas très bien avec plusieurs sessions et ne permet pas de spécifier un nom de fichier journal personnalisé.

Pour plusieurs sessions d'écran, voici ma formule:

1) créer un fichier de configuration pour chaque processus:

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

Si vous voulez le faire "à la volée", vous pouvez changer logfile automatiquement .\012 signifie "nouvelle ligne", car utiliser \n l'imprimera dans le fichier journal: source .

2) Lancez votre commande avec les drapeaux "-c" et "-L":

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

C'est tout. Vous verrez "test.log" après le premier flush:

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

J'ai trouvé que "-L" est toujours requis même lorsque "log on" est sur le fichier de configuration. 

Je n'ai pas pu trouver une liste des variables de format d'heure (comme% m) utilisées par screen. Si vous avez un lien de ces formats, postez-le ci-dessous.

** SUPPLÉMENTAIRE **

Si vous voulez le faire "à la volée", vous pouvez utiliser ce script:

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

Pour l'utiliser, enregistrez-le (screen.sh) et définissez les autorisations + x:

./screen.sh TEST ./test.pl

... et va exécuter ./test.pl et créer un fichier journal dans /var/log/TEST.log

12
lepe

pour terminal mac:

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

détails

  • script application intégrée pour "créer un TypeScript de session de terminal"
  • -a ajouter au fichier de sortie
  • -t 0 le temps entre l'écriture dans le fichier de sortie est de 0 secondes, donc out.txt est mis à jour pour chaque nouveau caractère
  • out.txt est juste le nom du fichier de sortie
  • screen /dev/ttyUSB0 115200 - commande de la question pour la connexion à un périphérique externe

vous pouvez ensuite utiliser tail pour voir que le fichier est mis à jour 

tail -100 out.txt

12
ryan

La commande suivante fonctionne pour la version d'écran 4.06.02

screen -L -Logfile Log_file_name_of_your_choice command_to_be_executed

Depuis la page de manuel de l'écran:

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

Vous pouvez vérifier la version existante de screen à l'aide de screen -version. Vous pouvez télécharger et installer la dernière version de screen à partir de https://www.gnu.org/software/screen/ .

9
Nikhil

Ctrl+A puis Shift+H travaille pour moi. Vous pouvez afficher le fichier screenlog.0 pendant l'exécution du programme.

9
jaggedsoft

La commande "script" sous Unix devrait faire l'affaire. Lancez-le au début de votre nouvelle console et vous devriez être bon.

4
Ruben

Ce qui suit pourrait être utile (testé sur: Linux/Ubuntu 12.04):

cat /dev/ttyUSB0

En utilisant ce qui précède, vous pouvez alors effectuer toutes les réorientations dont vous avez besoin. Par exemple, pour vider la sortie sur votre console lors de l’enregistrement dans votre fichier, vous devez:

cat /dev/ttyUSB0 | tee console.log
3
Keo Malope

Voici une astuce: enveloppez-le dans sh -c!

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

2>&1 redirige stderr vers stdout afin que tee puisse intercepter et consigner les messages d'erreur.

0
rkok