Wie überprüfe ich, ob ich in einer Bildschirmsitzung bin?


75

ist es irgendwie möglich zu überprüfen, ob ich gerade in der Bildschirmsitzung bin? Ich brauche es, um festzustellen, ob das Drücken von Strg + D mich vom Server trennen oder nur den aktuellen Bildschirm schließen würde. Vielen Dank.

Antworten:


107

Sie können sich die $STYVariable ansehen (eine Variable, die mit dem Befehl screen festgelegt wurde ). Wenn es nicht "" ist, befinden Sie sich in einer Bildschirmsitzung.

Ich bin auf dem Bildschirm

$ echo $STY 
29624.pts-1.iain-10-04
$

Ich bin nicht auf dem Bildschirm

$ echo $STY

$

12
Dies setzt voraus, dass Sie sich noch in einer laufenden Sitzung auf dem lokalen Computer befinden. Wenn Sie den Bildschirm und dann an einer anderen Stelle SSH starten, funktioniert dies nicht.
David Mackintosh

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
aggregate1166877

2
@DavidMackintosh Wenn Sie sich mit SSH an einer anderen Stelle befinden, wird durch Drücken von Strg-D die Verbindung zum Server getrennt. Genau das ist die Frage, nach der Sie gefragt werden.
womble

1
@ aggregate1166877 Ich habe dies, wenn Sie in jeder einzelnen Maschine, die ich jetzt verwende, als Alias ​​gepostet haben.
Eduardo Bezerra

44

Sie können sich die Variable $ TERM ansehen.

echo $TERM

Wenn es sich um eine screenSitzung handelt, sollte der Begriff Variable "screen" zurückgeben.

root@deore:/volumes# echo $TERM
screen

Strg-a-d (um den Bildschirm zu verlassen)

root@deore:/volumes# echo $TERM
xterm

Überprüfen Sie auch: https://stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
Dies setzt voraus, dass Sie aus irgendeinem Grund nicht absichtlich mit Ihrem TERM-Wert in Konflikt geraten.
David Mackintosh

1
Wenn Sie Ihre TERM-Variable ändern, während Sie sich auf dem Bildschirm befinden, verursachen Sie alle möglichen Probleme.
womble

Nun, meine Solaris 2.6-Knoten spielen mit TERM-Werten, die auf Bildschirmwerte eingestellt sind, nicht gut.
David Mackintosh

3
"$TERM" = "screen"scheint im sudoGegensatz zur $STYOption beim Betreten der Umgebung erhalten zu sein .
Melebius

29

Sofern Sie die Standardtastenbelegung nicht geändert haben, können Sie Ctrl+ a-> Ctrl+ tausführen, um die Uhrzeit anzuzeigen, wenn Sie sich auf dem Bildschirm befinden. Dies funktioniert auch, wenn Sie anderswo ssh: d haben, im Gegensatz zu den anderen Vorschlägen.


4
Warum stimmen wir dem nicht zu?
AndreKR

Dies ist definitiv die beste Lösung hier.
Felix Jen

2
@womble Wenn Sie sich in einem unbekannten Programm befinden, das zufällige destruktive Aktionen als Reaktion auf Tastensequenzen und Befehle ausführt, ist nichts sicher.
Gurgeh

2
@AndreKR: Es funktioniert nicht in einem Skript
Frank Meulenaar

1
Ich bin nicht upvoting, weil in einem Bildschirm und Screening in einem anderen Bildschirm, und ich muss buchstäblich sehen, ob $ STY überhaupt gesetzt ist. Aus irgendeinem Grund ist es wieder leer.
Brian Thomas

14

Der captionBefehl in der ~/.screenrcist eine gute Möglichkeit, eine Bildschirmsitzung zu unterscheiden.

Ich persönlich benutze das:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

Es wird eine Zeile wie die folgende am unteren Rand des Bildschirms hinzugefügt:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

Mit dem ersten Teil (Systemname + Laden) in Grün und dem Datum in Rosa. Nützlich und schwer zu übersehen!


Dies ist perfekt! Es kommt nicht in die Quere (untere Position), es ist immer sichtbar (und farbig) und liefert nützliche Informationen über das System. Ich habe dies auch hier gepostet stackoverflow.com/a/43571028/2450431
hrvoj3e

6

Ich habe eine andere Lösung gefunden:
Ändern Sie Ihre .screenrc, so dass meine Bildschirmsitzung völlig anders aussieht als bei normalen Terminals.


Ich denke, ich weiß, was Sie vorschlagen, und es könnte in einigen Situationen dieses Problem ganz vermeiden. Es könnte hilfreicher sein, wenn Sie beschreiben, was Sie damit meinen, indem Sie (z. B.) eine Beispieldatei .screenrcanzeigen.
Jvriesem

0
screen -ls

um Ihre Sessions zu sehen und

screen -r sessioninfo

Verbindung zu einem getrennten Teilnehmer wiederherstellen, wenn dieser getrennt ist.

screen -D -r sessioninfo

Verbindung zu einem getrennten Teilnehmer wiederherstellen.


1
Dies beantwortet die Frage nicht.
womble

-1

Mach ein screen -ls. Es wird explizit angeben , im AttachedVergleich zu DetachedStatus.

Beispiel beigefügt:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

Beispiel abgelöst:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
Wenn an anderer Stelle Bildschirme angebracht sind, liegt möglicherweise ein Problem vor.
Dennis Nolte
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.