Ripristinare la sessione tmux dopo il riavvio
C'è un modo per salvare una sessione tmux? In altre parole, se riavvio il computer, perderò sempre le sessioni?
C'è un modo per salvare una sessione tmux? In altre parole, se riavvio il computer, perderò sempre le sessioni?
Sì, se riavvii il computer perderai le sessioni. Le sessioni non possono essere salvate. Ma possono essere scriptate. Quello che la maggior parte fa infatti è scrivere alcune sessioni in modo da poterle ricreare. Per esempio, ecco un banale script di shell per creare una sessione:
#!/bin/zsh
SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null
if [$? != 0]
then
tmux new-session -s $SESSIONNAME -n script -d
tmux send-keys -t $SESSIONNAME "~/bin/script" C-m
fi
tmux attach -t $SESSIONNAME
Ecco cosa fa. Per prima cosa, controlla se c'è già una sessione con quel nome (in questo caso, il nome originale è “script”) con tmux has-session. Controlla il codice di ritorno. Se c'è già una sessione in corso con quel nome, salta il ciclo “if” e va direttamente all'ultima riga, dove si attacca alla sessione. Altrimenti, crea una sessione e le invia alcune chiavi (per ora esegue solo uno script a caso). Poi esce dal blocco “if” e si attacca.
Questo è un esempio molto banale. Potete creare più finestre, riquadri e simili prima di attaccare.
Questo non sarà la stessa cosa che avete chiesto, però. Se fai delle modifiche alla sessione, per esempio rinomini una finestra e crei un nuovo pannello in essa, se riavvii queste modifiche non saranno ovviamente salvate.
Ci sono alcuni strumenti che facilitano il processo di scripting delle sessioni, anche se preferisco fare le cose manualmente (penso sia più versatile). Questi strumenti sono Tmuxinator e Teamocil .
La mia principale fonte di informazioni è stato il libro Tmux “The Pragmatic Bookshelf”.
Ho scritto un semplice script bash che persiste le sessioni di tmux aperte, le finestre e le directory di lavoro correnti in ciascuna.
Chiamatelo così manualmente o periodicamente da cron (perché potreste dimenticarlo):
tmux-session save
Scriverà su ~/.tmux-session
. Ripristinateli dopo il riavvio in questo modo:
tmux-session restore
Lo trovo molto meglio di uno script Perl lungo diverse centinaia di righe.
tmuxinator ](https://github.com/tmuxinator/tmuxinator) è uno strumento scritto in Ruby, che potrebbe essere usato per creare e gestire sessioni tmux con facilità. Può essere usato per creare un progetto, che potrebbe poi essere istanziato come sessione tmux.
Uso con successo https://github.com/jimeh/tmuxifier per ricreare le sessioni. Questo può essere installato senza ruby, semplicemente usando git.
I campioni sono abbastanza auto esplicativi, ad es: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh