Il comando screen permette di avere una interfaccia tra un terminale fisico (in pratica: noi) e un comando (in genere la shell). Tale interfaccia, che agisce da proxy, permette anche ad altri terminali fisici di "agganciarsi".
In sostanza: possiamo interagire con la stessa shell da più terminali.
Screen fa molte altre cose: ad esempio agisce da vero e proprio "window manager di terminale", permettendo di avere in una sessione più finestre di shell aperte. Ma sono funzionalità che in questo articolo non verranno trattate.
Quando vogliamo iniziare una sessione di screen è sufficiente che digitiamo "screen" (dopo averlo installato, ovvio). Da quel momento in poi abbiamo creato un ambiente al quale possiamo collegarci anche da altri terminali, e tutto ciò che eseguiamo possiamo poi riprenderlo altrove.
Visto che io sono pigro e smemorato, e mi dimentico sempre di avviarlo manualmente quando potrebbe servirmi, ho modificato il file .bashrc per far partire screen automaticamente in ogni terminale, aggiungendo:
if [ "$STY" == "" ] ; then screen fi
Questo un elenco dei comandi utili:
screen -ls
Mostra le sessioni aperte e collegate (attached) o scollegate (detached)
echo $STY
Mostra il pid della sessione attuale (se siamo dentro una)
screen -x [PID]
Collega una sessione aperta e già collegata altrove, diventa "multi-window" (la vediamo da piu' parti). Poi possiamo usare "Ctrl+a, d" per uscire lasciando collegate le altre.
Da notare che se PID è scollegata, la collega comunque (come -r). Quindi può convenire sempre usare -x
screen -r [PID]
Ricollega una sessione aperta ma scollegata (detached). Ma preferisco usare "-x" per i motivi detti sopra.
screen -d -m [COMMAND]
Esegue il comando in una nuova sessione, staccata (se tolgo -d usa la sessione attuale creando una nuova finestra, se c'è). Utile (anche senza -d) in cron. Quando il comando finisce chiude anche la sessione (o finestra senza -d)
Ctrl+a, d
Scollega la sessione attuale (ma la lascia aperta). Utile anche se siamo in multi-window (screen -x) per uscire lasciando collegate le altre finestre
Ctrl+a, ESC
Va in modalità scrollback mode: con i cursori possiamo tornare indietro nell'output (per vedere cosa ha scritto l'ultimo comando se non sta nella pagina). Con ESC torniamo alla command line
Ovviamente per vedere tutti le possibilità di comandi, sequenze di escape... basta guardare il man...
Per concludere, questo lo ~/.screenrc che uso io, giusto per migliorare un pelo quello base:
startup_message off defscrollback 10000 term screen-256color hardstatus off hardstatus alwayslastline hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}]' termcapinfo xterm* ti@:te@
Aggiungi un commento