Você precisa screen -R -d
se conectar automaticamente a uma sessão existente, se houver, e criar uma sessão caso contrário.
Certifique-se de fazer isso apenas em conchas interativas . Fontes Bash ~/.bashrc
mesmo para shells não interativos quando o processo pai é rshd ou sshd (isso é mencionado na documentação, mas é fácil perder). Você pode dizer que um shell é interativo porque $-
contém i
.
case $- in
*i*) screen -Rd;;
esac
Isso não permitirá que você execute diferentes sessões de tela em diferentes terminais.
Você precisará se desconectar da tela e sair do shell pai para sair. Isso pode ser resolvido usando em exec screen
vez de screen
.
Se você iniciar um shell que não seja o de login, será exibido na tela, o que não é o que você deseja na maioria das vezes. Eu pelo menos restringiria isso quando você estiver executando diretamente em uma sessão ssh interativa, com algo como o seguinte no seu ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Tenha cuidado ao fazer coisas complexas com você, .bashrc
pois um erro que causa a saída do shell dificulta o logon.
O que eu recomendo é não modificar os arquivos de inicialização do shell no servidor, mas 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 do ambiente de área de trabalho no cliente.) Dessa forma, você pode optar facilmente por não executar a tela, especificar um nome de sessão alternativo e assim por diante.