Salvar o estado completo da sessão da tela GNU

32

É possível persistir o "estado" de uma janela de tela GNU (ou apenas um shell padrão) para que eu possa recarregar tudo após uma reinicialização:

  • O número de conchas abertas
  • O nome de cada shell
  • O diretório atual de cada shell
  • A história de cada shell
  • Se possível, suas variáveis ​​de ambiente
Barthelemy
fonte

Respostas:

19

Não é realmente possível salvar uma sessão de tela completa.

O que você pode fazer é criar um apropriado .screenrcque irá configurar algumas coisas depois que você reiniciar o sistema.

Aqui estão alguns comentários para as coisas que você listou:

  • O número de conchas abertas
  • O nome de cada shell
  • O diretório atual de cada shell

Eu uso algo assim no meu .screenrcpara abrir algumas conchas específicas na inicialização:

## set the default shell
shell                   zsh

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

Você receberá a string entre '' como o nome da janela e o comando após o nome ser executado no shell padrão. Inclua qualquer script que desejar, por exemplo, altere em um diretório específico e abra alguns logs.

  • A história de cada shell

Você já pensou em compartilhar a história dos reservatórios nas suas sessões? IMHO isso torna as coisas muito mais fáceis. No ZSH, é feito setopt SHARE_HISTORYno seu.zshrc

  • Se possível, suas variáveis ​​de ambiente

Se você realmente precisa disso e não deseja nenhum compromisso, pode pensar em um script de shell, que lê o estado atual da tela, salva o número de shells, variáveis ​​de ambiente etc. e coloca essas informações em um script de inicialização chamado pelo seu .screenrc. Para mim, isso não valeria o esforço, porque eu aprecio um ambiente limpo após uma reinicialização, se eu puder personalizar as janelas padrão da tela.

echox
fonte
Obrigado por suas sugestões. Eu encontrei uma maneira de compartilhar meu histórico no bash (não tão direto quanto no zsh), por isso tenho um fluxo de comandos que persiste. Em relação ao .screenrc, eu deveria ter pensado nisso. Infelizmente, parece que você só pode executar determinados scripts (comandos como 'cd' não funcionam), mas isso deve ser bom. Eu não me importo com as variáveis ​​de ambiente se posso inicializar um shell com um script.
Barthelemy
cd é uma função interna do seu shell, um comando cd não faria sentido fora de um "shell" :-) Mas você pode simplesmente incluir um script que contenha um cd / foo / bar após o shebang. Então seu novo shell mudará para este diretório.
Echox
sim, eu entendo essa distinção, apenas pensei que os comandos foram de alguma forma passados ​​para o shell e depois executados no shell. Mas não tenho problema em escrever scripts de inicialização :-) A história compartilhada foi uma ótima idéia, eu realmente gosto disso.
Barthelemy
10

Eu me deparei com um projeto chamado screen-session . Ele permite que você salve e recarregue as sessões da Tela GNU até certo ponto.

BUGHUNTER
fonte
2

Existe uma ferramenta para congelar o estado de um processo chamado criopídeo . No entanto, atualmente ele não funciona com a tela GNU, pois não suporta a recriação de uma hierarquia de subprocessos. Eles afirmam que desejam alcançar isso no futuro, mas o projeto não parece estar muito ativo no momento. No entanto, você pode querer rastrear o progresso deles.

fschmitt
fonte
0

Eu construí uma coisa semelhante no solaris anos atrás. Nem mesmo relacionado à tela; foi relacionado à sessão. "se $ TTY = qualquer coisa". echox tem a ideia certa.

dica: se você estiver fazendo isso em várias máquinas, reconheça que cada máquina merece sua própria definição do que deve ser feito quando você faz o login lá, em vez de todas serem iguais para o seu nfs montado / doméstico ou similar.

HTH, -pbr

pbr
fonte