Sie müssen screen -R -d
sich automatisch an eine vorhandene Sitzung anschließen, falls eine vorhanden ist, und ansonsten eine Sitzung erstellen.
Stellen Sie sicher, dass Sie dies nur bei interaktiven Shells tun . Bash-Quellen ~/.bashrc
auch für nicht interaktive Shells, deren übergeordneter Prozess rshd oder sshd ist (dies wird in der Dokumentation erwähnt, ist aber leicht zu übersehen). Sie können feststellen, dass eine Shell interaktiv ist, weil sie $-
enthält i
.
case $- in
*i*) screen -Rd;;
esac
Auf diese Weise können Sie nicht einfach verschiedene Bildschirmsitzungen in verschiedenen Terminals ausführen.
Sie müssen sich vom Bildschirm trennen und dann die übergeordnete Shell verlassen, um sich abzumelden. Dies kann gelöst werden, indem exec screen
anstelle von verwendet wird screen
.
Wenn Sie eine andere Shell als eine Anmeldeshell starten, wird der Bildschirm angezeigt, was Sie die meiste Zeit nicht möchten. Ich würde dies zumindest einschränken, wenn Sie direkt in einer interaktiven SSH-Sitzung mit so etwas wie dem Folgenden in Ihrer ~/.bash_profile
:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Seien Sie vorsichtig, wenn Sie komplexe Dinge mit Ihrem .bashrc
als Fehler ausführen, der das Beenden der Shell zur Folge hat. Dies würde die Anmeldung erschweren.
Ich empfehle , die Shell-Initialisierungsdateien nicht auf dem Server zu ändern, sondern den Bildschirm wie in explizit vom Client aus auszuführen
ssh -t host.example.com screen -R -d
(Sie würden wahrscheinlich einen Shell-Alias oder eine Verknüpfung zur Desktop-Umgebung auf dem Client erstellen.) Auf diese Weise können Sie einfach festlegen, dass der Bildschirm nicht ausgeführt werden soll, einen alternativen Sitzungsnamen angeben usw.