È necessario screen -R -d
collegarsi automaticamente a una sessione esistente se ne esiste una e, in caso contrario, creare una sessione.
Assicurati di farlo solo su shell interattive . Bash source ~/.bashrc
anche per shell non interattive quando il suo processo padre è rshd o sshd (questo è menzionato nella documentazione, ma è facile da perdere). Puoi dire che una shell è interattiva perché $-
contiene i
.
case $- in
*i*) screen -Rd;;
esac
Ciò non ti consentirà facilmente di eseguire diverse sessioni dello schermo in diversi terminali.
Dovrai staccarti dallo schermo, quindi uscire dalla shell principale per disconnetterti. Questo può essere risolto usando exec screen
invece di screen
.
Se avvii una shell diversa da una shell di accesso, verrai messo sullo schermo, il che non è quello che vorresti la maggior parte del tempo. Almeno lo limiterei a quando stai eseguendo direttamente in una sessione ssh interattiva, con qualcosa di simile al seguente nel tuo ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Fare attenzione quando si eseguono operazioni complesse con .bashrc
un errore che causa l'uscita della shell renderebbe difficile l'accesso.
Quello che consiglio è di non modificare i file di inizializzazione della shell sul server, ma di eseguire lo schermo in modo esplicito dal client, come in
ssh -t host.example.com screen -R -d
(Probabilmente creeresti un alias di shell o un collegamento all'ambiente desktop sul client.) In questo modo puoi facilmente scegliere di non eseguire lo schermo, specificare un nome di sessione alternativo e così via.