J'ai un script en cours d'exécution à long terme et j'ai oublié de rediriger sa sortie vers un fichier. Je peux le voir dans un terminal, mais puis-je l'enregistrer dans un fichier?
Je ne demande pas tee
, la redirection de sortie (par exemple >
, >>
) etc - la commande a commencé, et je ne peux pas courir à nouveau. J'ai besoin de sauvegarder la sortie déjà générée. Si je peux le voir sur mon écran, c'est quelque part stocké / mis en cache / tamponné. Où?
screendump
, /dev/vcsX
et ainsi de suite me permet d'enregistrer uniquement le dernier écran sur la sortie du terminal (pas le courant! - le terminal de défilement n'aide pas).
C'est sur une console virtuelle Linux, pas un émulateur de terminal X11 comme gnome-terminal
avec la souris et autres goodies.
/dev/
, non? Sinon, vous avez écrit comment l'atteindre.Réponses:
/dev/vcs[a]<n>
vous n'obtiendrez que le dernier écran plein même si vous avez fait défiler vers le haut, mais la sélectionioctl()
telle qu'utilisée pargpm
vous permettra de vider l'écran actuellement affiché même lorsque vous avez fait défiler vers le haut.Vous pouvez donc faire:
Ajustez le 80 et le 25 à votre largeur et hauteur d'écran réelles.
Le
sleep 3
vous donne le temps de faire défiler vers le haut (avec Shift+PageUP) jusqu'à l'écran que vous souhaitez vider.cat > file
redirige la pâte versfile
. Terminez avec Ctrl+D.Voir
console_ioctl(4)
pour plus de détails.Si vous avez
gpm
installé et exécuté, vous pouvez faire cette sélection avec la souris.Le défilement et la sélection de la console virtuelle Linux sont très limités et assez ennuyeux (en ce que lorsque vous changez de console, vous perdez tout le défilement). À l'avenir, je vous suggère d'utiliser des choses comme GNU
screen
outmux
en son sein (je les utilise personnellement dans des terminaux encore plus performants). Avec eux, vous pouvez avoir des défilements de recherche plus importants et les vider facilement dans des fichiers (et même enregistrer toutes les sorties du terminal, ainsi que tous les autres goodies fournis avec ces multiplexeurs de terminaux).Quant à l'automatisation du processus de vidage de la totalité du tampon de défilement, cela devrait être possible dans certaines conditions, mais assez difficile car l'API est très limitée. Il existe un document non documenté
ioctl
(TIOCLINUX, sous-code = 13) pour faire défiler la console virtuelle actuelle d'un certain décalage (négatif pour le défilement vers le haut, positif pour le défilement vers le bas).Il n'y a cependant aucun moyen (que je sache) de connaître la taille actuelle du tampon de défilement. Il est donc difficile de savoir quand vous avez atteint le sommet de ce tampon. Si vous essayez de le faire défiler, l'écran ne sera pas déplacé d'autant et il n'y a aucun moyen fiable de savoir à quel point l'écran a réellement défilé.
Je trouve également le comportement de l'ioctl de défilement erratique (au moins avec la console VGA), où le défilement de moins de 4 lignes ne fonctionne qu'occasionnellement.
Le script ci-dessous semble fonctionner pour moi sur les consoles de tampon de trames (et parfois sur les consoles VGA) à condition que le tampon de défilement ne contienne pas de séquences de lignes identiques plus longues qu'un écran plus une ligne.
C'est assez lent car il fait défiler une ligne à la fois et doit attendre 10 ms pour eof lors de la lecture de chaque vidage d'écran.
À utiliser à
that-script > file
partir de la console virtuelle.la source
https://github.com/jerome-pouiller/reredirect/ pourrait être une option?
La description:
La syntaxe est la suivante:
la source