Enregistrer l'état de session d'écran complet GNU


32

Est-il possible de conserver "l'état" d'une fenêtre d'écran GNU (ou simplement d'un shell standard) afin que je puisse tout recharger après un redémarrage:

  • Le nombre d'obus ouverts
  • Le nom de chaque coquille
  • Le répertoire actuel de chaque shell
  • L'histoire de chaque coquille
  • Si possible, leurs variables d'environnement

Réponses:


19

Il n'est pas vraiment possible de sauvegarder une session d'écran complète.

Ce que vous pouvez faire est de créer un fichier .screenrcqui configurera certaines choses après le redémarrage de votre système.

Voici quelques commentaires sur les choses que vous avez énumérées:

  • Le nombre d'obus ouverts
  • Le nom de chaque coquille
  • Le répertoire actuel de chaque shell

J'utilise quelque chose comme ceci dans mon .screenrcpour ouvrir des shells spécifiques au démarrage:

## set the default shell
shell                   zsh

# screens
screen -t 'zsh'
screen -t 'mutt' mutt
screen -t 'zsh' /home/user/bin/scriptToRun
[..]

Vous obtiendrez la chaîne entre '' comme nom de la fenêtre et la commande une fois que le nom sera exécuté sur votre shell par défaut. Incluez le script de votre choix, par exemple modifiez-le dans un répertoire spécifique et ouvrez des journaux.

  • L'histoire de chaque coquille

Avez-vous déjà pensé à partager l’histoire des coquillages au cours de vos sessions? IMHO cela rend les choses beaucoup plus faciles. En ZSH sa fait avec setopt SHARE_HISTORYdans votre.zshrc

  • Si possible, leurs variables d'environnement

Si vous en avez vraiment besoin et que vous ne voulez pas de compromis, vous pouvez envisager un script shell, qui lit l'état actuel de l'écran, enregistre le nombre de shells, de variables d'environnement, etc. et place cette information dans un script de démarrage. appelé par votre .screenrc. Pour moi, cela ne vaudrait pas la peine, car j'apprécie un environnement propre après un redémarrage, si je peux personnaliser les fenêtres par défaut pour screen.


Merci pour vos suggestions. J'ai trouvé un moyen de partager mon historique sur bash (pas aussi simple qu'avec zsh), de sorte que j'ai un flux de commandes qui est conservé. En ce qui concerne le .screenrc, j'aurais dû y penser. Malheureusement, il semble que vous ne puissiez exécuter que certains scripts (des commandes telles que "cd" ne fonctionnent pas), mais cela devrait aller. Les variables d’environnement ne me dérangent pas si je peux initialiser un shell avec un script.
Barthélémy

cd est une fonction intégrée de votre shell, une commande cd n'aurait pas de sens en dehors d'un "shell" :-) Mais vous pouvez simplement inclure un script contenant un cd / foo / bar après le shebang. Ensuite, votre nouveau shell passera dans ce répertoire.
echox

oui je comprends cette distinction, je pensais juste que les commandes étaient en quelque sorte passées au shell puis exécutées dans le shell. Mais je n’ai aucun problème pour écrire des scripts d’initialisation :-) L’historique partagé était une excellente idée, mais j’aime vraiment beaucoup.
Barthélemy

10

Je suis tombé sur un projet appelé screen-session . Il vous permet de sauvegarder et de recharger des sessions GNU Screen dans une certaine mesure.


2

Il existe un outil permettant de geler l'état d'un processus appelé cryopid . Cependant, pour le moment, cela ne fonctionne pas avec GNU screen, car il ne permet pas de recréer une hiérarchie de sous-processus. Ils déclarent vouloir atteindre cet objectif à l'avenir, mais le projet ne semble pas être trop actif pour le moment. Néanmoins, vous voudrez peut-être suivre leurs progrès.


0

J'ai construit une chose similaire il y a des années sur Solaris. Pas même lié à l'écran; c'était lié à la session. "si $ TTY = peu importe". Echox a la bonne idée.

Conseil: si vous effectuez cette opération sur plusieurs ordinateurs, sachez que chaque ordinateur mérite sa propre définition de ce qui doit être fait lorsque vous vous connectez sur celui-ci, au lieu que tous soient identiques par votre nfs monté / home ou similaire.

HTH, -pbr

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.