Salva lo stato completo della sessione dello schermo GNU


32

È possibile mantenere lo "stato" di una finestra dello schermo GNU (o solo una shell standard) in modo da poter ricaricare tutto dopo un riavvio:

  • Il numero di shell aperte
  • Il nome di ogni shell
  • La directory corrente di ogni shell
  • La storia di ogni shell
  • Se possibile, le loro variabili di ambiente

Risposte:


19

Non è davvero possibile salvare una sessione schermo completa.

Quello che puoi fare è creare un vero e proprio .screenrcche imposterà alcune cose dopo aver riavviato il sistema.

Ecco alcuni commenti alle cose che hai elencato:

  • Il numero di shell aperte
  • Il nome di ogni shell
  • La directory corrente di ogni shell

Uso qualcosa del genere nel mio .screenrcper aprire alcune shell specifiche all'avvio:

## set the default shell
shell                   zsh

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

Otterrai la stringa tra '' come nome della finestra e il comando dopo che il nome verrà eseguito sulla shell predefinita. Includere qualsiasi script desiderato, ad esempio modificare in una directory specifica e aprire alcuni registri.

  • La storia di ogni shell

Hai mai pensato di condividere la cronologia delle shell durante le tue sessioni? IMHO questo rende le cose molto più facili. In ZSH è finito con setopt SHARE_HISTORYnel tuo.zshrc

  • Se possibile, le loro variabili di ambiente

Se hai davvero bisogno di questo e non vuoi alcun compromesso potresti pensare a uno script di shell, che legge lo stato corrente dello schermo, salva il numero di shell, variabili di ambiente, ecc. E inserisce queste informazioni in uno script di avvio chiamato dal tuo .screenrc. Per me questo non varrebbe la pena, perché apprezzo un ambiente pulito dopo il riavvio, se posso personalizzare le finestre predefinite per lo schermo.


Grazie per i vostri suggerimenti. Ho trovato un modo per condividere la mia storia su bash (non così semplice come con zsh), quindi ho un flusso di comandi che è persistito. Per quanto riguarda il .screenrc, avrei dovuto pensarci. Sfortunatamente, sembra che tu possa eseguire solo determinati script (i comandi come 'cd' non funzionano), ma dovrebbe andare bene. Non mi occupo delle variabili d'ambiente se posso inizializzare una shell con uno script.
Barthelemy,

cd è una funzione integrata della tua shell, un comando cd non avrebbe senso al di fuori di una "shell" :-) Ma puoi semplicemente includere uno script che contiene un cd / foo / bar dopo lo shebang. Quindi la tua nuova shell cambierà in questa directory.
eco

sì, capisco questa distinzione, ho solo pensato che i comandi fossero in qualche modo passati alla shell e poi eseguiti nella shell. Ma non ho problemi a scrivere script di inizializzazione :-) La storia condivisa è stata un'idea formidabile tra l'altro, mi piace molto.
Barthelemy,

10

Mi sono imbattuto in un progetto chiamato screen-session . Ti consente di salvare e ricaricare le sessioni dello schermo GNU in una certa misura.


2

C'è uno strumento per congelare lo stato di un processo chiamato cryopid . Tuttavia, attualmente non funziona con lo schermo GNU in quanto non supporta la ricostruzione di una gerarchia di sottoprocessi. Dichiarano di voler raggiungere questo obiettivo in futuro, ma al momento il progetto non sembra essere troppo attivo. Tuttavia, potresti voler tracciare i loro progressi.


0

Ho costruito una cosa simile su Solaris anni fa. Nemmeno relativo allo schermo; era legato alla sessione. "if $ TTY = qualunque cosa". echox ha l'idea giusta.

suggerimento: se lo stai facendo su più macchine, riconosci che ogni macchina merita la propria definizione di cosa dovrebbe essere fatto quando accedi lì, piuttosto che essere tutti uguali per il tuo nfs montato / home o simile.

HTH, -pbr

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.