Screen tricks

Recentemente lá no emprego alguém se deu ao trabalho de me mostrar a luz sobre uma ferramenta essencial que tenho estado a ignorar totalmente em todos estes anos que tenho usado linux (e demais *nix): o screen.

Para quem não conhece o screen deixo uma pequena explicação: o screen funciona como um gestor de múltiplos terminais dentro da mesma janela (uma especie de “tabs” na cli) e para além disso serve também para manter as aplicações a correr quando saímos da sessão (algo bastante útil quando o wireless decide falhar ou o pc decide empancar por causa de um controlador IDE estragado).

Eu experimentei e devo dizer que estou totalmente rendido á sua utilidade mas, como sempre, foram muitas as vezes que dei por mim a entrar numa maquina, começar o que queria fazer e só a meio me lembrar que dava jeito ter o screen a correr para poder ir fazer outra coisa qualquer. Para resolver esta situação decidi forçar-me a mim próprio a usar o screen e como tal fiz um pequeno script para colocar no .bashrc que resolve a situação:


if [[ $TERM == 'xterm' ]]; then
        if [[ `screen -list | grep Detached | wc -l` == 0 ]]; then
                if [ ! ${SSH_TTY} ]; then
                        exec screen
                else   
                        screen
                fi
        else   
                if [ ! ${SSH_TTY} ]; then
                        exec screen -dRR
                else   
                        screen -dRR
                fi
        fi
fi

Este pequeno script muda a minha sessão de bash para o screen sempre que entro numa consola local (mas não abre o screen dentro do screen) ou então simplesmente corre o screen se estiver a usar ssh para aceder á maquina. Basicamente a diferença é: em máquinas locais exit sai da sessão enquanto que nas remotas exit sai apenas do screen mas mantém a sessão (NOTA: ainda não testei isto).

Como bónus ele detecta se existem sessões ligadas mas inactivas na maquina em questão e religa-se a uma delas caso assim seja (infelizmente ainda é aleatória esta parte).

Para complementar falta o script que arranjei num blog para adicionar uma pequena barrinha na parte inferior da consola com uma lista das “tabs” do screen, data e hora e, acima de tudo, o hostname da maquina onde o screen está a correr:


caption always "%{= kw}%-w%{= BW}%n %t%{-}%+w %-= @%H - %LD %d %LM - %c"

E estou pronto a usar o screen permanentemente nas minhas sessões. Espero que isto ajude alguém por aí como me ajuda a mim.