Você precisa de screen -R -d
para anexar automaticamente a uma sessão existente, se existir uma, e criar uma sessão de outra forma.
Certifique-se de fazer somente isso em shells interativos . Fontes de bash ~/.bashrc
mesmo para shells não interativos quando seu processo pai é rshd ou sshd (isso é mencionado na documentação, mas é fácil errar). Você pode dizer que um shell é interativo porque $-
contém i
.
case $- in
*i*) screen -Rd;;
esac
Isso não permitirá que você execute sessões de tela diferentes em terminais diferentes.
Você precisará desanexar da tela e sair do shell pai para fazer logout. Isso pode ser resolvido usando exec screen
em vez de screen
.
Se você iniciar um shell diferente de um shell de login, será colocado na tela, o que não é o que você deseja na maior parte do tempo. Eu, pelo menos, restringiria isso quando você estiver executando diretamente em uma sessão ssh interativa, com algo como o seguinte em seu ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Tenha cuidado ao fazer coisas complexas com o .bashrc
, pois um erro que faz com que o shell seja encerrado dificultaria o login.
O que eu recomendo é não modificar seus arquivos de inicialização do shell no servidor, mas sim executar a tela explicitamente a partir do cliente, como em
ssh -t host.example.com screen -R -d
(Você provavelmente criaria um atalho de shell ou atalho de ambiente de desktop no cliente.) Dessa forma, você pode escolher facilmente não executar a tela, especificar um nome de sessão alternativo e assim por diante.