Lavorando parecchio tempo al terminale ogni giorno, sono diventato un fan di GNU Screen.
A dispetto della laconica descrizione data dalla sua pagina di man:
«Screen is a full-screen window manager that multiplexes a physical terminal between several processes (typically interactive shells).»
screen è il programma ideale per semplificarsi la vita quando si lavora su server remoti. La fatica iniziale nel dover imparare a memoria almeno una decina di scorciatoie da tastiera è ampiamente ripagata dal fatto di poter lavorare su diversi terminali usando un’unica sessione SSH.
La feature di gran lunga più comoda è quella di poter "staccare" una sessione (detach), chiudere la sessione SSH dal PC in ufficio, tornare a casa, ricollegarsi in SSH, "riattaccare" la sessione e riprendere il lavoro esattamente da dove lo avevo lasciato prima, con i miei 4-5 terminali ancora aperti. Questa stessa feature è veramente utile quando si lanciano comandi che richiedono molto tempo per essere eseguiti, perché permette di chiudere la sessione SSH senza interromperli.
Screen mi piace molto, ma avevo due problemi:
- A volte non riesco a capire al volo se mi trovo dentro una sessione di screen o meno.
- Sui miei server voglio lavorare solo con screen, senza doverlo lanciare manualmente all’inizio della sessione SSH.
Ho risolto il primo problema modificando il mio file .bashrc
e aggiungendo queste linee alla fine:
ps -A | grep $PPID | grep screen > /dev/null 2> /dev/null
if [ $? -ne 0 ]
then
screen -DR
fi
In questo modo, non appena faccio il login SSH su una macchina, vengo automaticamente catapultato nella sessione di screen già aperta. Se non c’è una sessione di screen già aperta, poco male: ne verrà lanciata una nuova. Il blocco if serve a evitare che quando apro un nuovo terminale dentro una sessione screen, venga aperta un’altra nuova, inutile sessione di screen.
Soluzione al problema numero 2. Ho modificato ancora una volta il mio .bashrc
per fare in modo che nel mio prompt compaia il carattere & se sono dentro una sessione di screen, con lo stesso sistema di cui sopra.