Guardar el estado completo de la sesión de pantalla de GNU

32

¿Es posible mantener el "estado" de una ventana de pantalla de GNU (o simplemente un shell estándar) para que pueda volver a cargar todo después de un reinicio:

  • El número de conchas abiertas
  • El nombre de cada caparazón.
  • El directorio actual de cada shell
  • La historia de cada caparazón.
  • Si es posible, sus variables de entorno
Barthelemy
fuente

Respuestas:

19

Realmente no es posible guardar una sesión de pantalla completa.

Lo que puede hacer es crear un apropiado .screenrcque configurará algunas cosas después de reiniciar su sistema.

Aquí hay algunos comentarios sobre las cosas que enumeró:

  • El número de conchas abiertas
  • El nombre de cada caparazón.
  • El directorio actual de cada shell

Utilizo algo como esto en mi .screenrcpara abrir algunos shells específicos al inicio:

## set the default shell
shell                   zsh

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

Obtendrá la cadena entre '' como su nombre de ventana y el comando después de que el nombre se ejecute en su shell predeterminado. Incluya cualquier script que desee, por ejemplo, cambie en un directorio específico y abra algunos registros.

  • La historia de cada caparazón.

¿Alguna vez has pensado en compartir la historia de los shells en tus sesiones? En mi humilde opinión, esto hace las cosas mucho más fáciles. En ZSH se hace con setopt SHARE_HISTORYen su.zshrc

  • Si es posible, sus variables de entorno

Si realmente necesita esto y no desea ninguna compensación, puede pensar en un script de shell, que lee el estado actual de la pantalla, guarda el número de shells, variables de entorno, etc. y coloca esta información en un script de inicio llamado por tu .screenrc. Para mí, esto no valdría la pena porque aprecio un entorno limpio después de un reinicio, si puedo personalizar las ventanas predeterminadas para la pantalla.

echox
fuente
Gracias por sus sugerencias Encontré una manera de compartir mi historial en bash (no tan sencillo como con zsh), así que tengo una secuencia de comandos que persiste. Con respecto al .screenrc, debería haberlo pensado. Desafortunadamente, parece que solo puede ejecutar ciertos scripts (comandos como 'cd' no funcionan), pero eso debería estar bien. No me importan las variables de entorno si puedo inicializar un shell con un script.
Barthelemy el
cd es una función incorporada de su shell, un comando de cd no tendría sentido fuera de un "shell" :-) Pero simplemente puede incluir un script que contenga un cd / foo / bar después del shebang. Entonces su nuevo shell cambiará a este directorio.
echox
Sí, entiendo esta distinción, solo pensé que los comandos de alguna manera se pasaron al shell y luego se ejecutaron en el shell. Pero no tengo problemas para escribir scripts de inicialización :-) El historial compartido fue una idea excelente por cierto, realmente me gusta.
Barthelemy
10

Me topé con un proyecto llamado screen-session . Le permite guardar y volver a cargar sesiones de GNU Screen hasta cierto punto.

BUGHUNTER
fuente
2

Hay una herramienta para congelar el estado de un proceso llamado crioides . Sin embargo, actualmente no funciona con la pantalla GNU ya que no admite la recreación de una jerarquía de subprocesos. Afirman que quieren lograr esto en el futuro, pero el proyecto no parece estar demasiado activo en este momento. Sin embargo, es posible que desee rastrear su progreso.

fschmitt
fuente
0

Construí algo similar en Solaris años atrás. Ni siquiera relacionado con la pantalla; estaba relacionado con la sesión. "si $ TTY = lo que sea". echox tiene la idea correcta.

Consejo: si está haciendo esto en varias máquinas, reconozca que cada máquina merece su propia definición de lo que debe hacerse al iniciar sesión allí, en lugar de que todas sean iguales por su nfs montado / home o similar.

HTH, -pbr

pbr
fuente