Frage Woher weiß ich, dass ich in einem Linux-Bildschirm laufe oder nicht?


Der "Bildschirm" bezieht sich auf ein Programm, das in Wie stelle ich eine Verbindung zu einer getrennten SSH-Sitzung wieder her? . Das ist eine gute Einrichtung.

Aber es gibt eine Frage, die ich gerne wissen möchte. Woher weiß ich, ob ich in einem "Bildschirm" laufe? Der Unterschied ist:

  • Wenn ja, kann ich das aktuelle Terminalfenster sicher schließen, z. B. ein PuTTY-Fenster schließen, ohne meine Shell-Sitzung (Bash usw.) zu verlieren.
  • Wenn nein, muss ich mich um ausstehende Arbeiten kümmern, bevor ich das Terminalfenster schließe.

Besser, ich möchte, dass dieser Status in der PS1-Eingabeaufforderung angezeigt wird, damit ich ihn jederzeit automatisch sehen kann.


57
2018-04-06 01:17


Ursprung


Wenn Sie tmux anstelle des Bildschirms verwenden, erhalten Sie standardmäßig eine kleine Statusleiste. Sie sind für die grundlegende Verwendung ziemlich gleich. - Samuel Edwin Ward
Lege dein Totem auf den Tisch und lass es drehen. Wenn es weiter dreht, bist du in Ordnung. Sonst bist du auf einem Bildschirm:] - Konerak
Sie können auch verwenden Byobu mit Bildschirm und tmux. Es kann so konfiguriert werden, dass es automatisch bei der Anmeldung geladen wird und dann durch Drücken der Taste F6 die Verbindung getrennt und abgemeldet wird. - mp3foley
Mögliches Duplikat von Wie überprüfe ich, ob ich in einer Bildschirmsitzung bin? - Andrew Schulman


Antworten:


(Gestohlen von "Wie kann ich feststellen, ob ich auf einem Bildschirm bin?"Over auf StackOverflow und von Benutzer erstellt jho. P.S. Sie können nicht für ein Duplikat über StackExchange-Websites stimmen.)

Prüfen $STY. Wenn es null ist, sind Sie auf einem "echten" Terminal. Wenn es etwas enthält, ist es der Name des Bildschirms, in dem Sie sich befinden.

Wenn Sie nicht im Bildschirm sind:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

Wenn Sie im Bildschirm sind:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

Wenn Sie tmux anstelle von screen verwenden, überprüfen Sie auch $TMUX. Fügen Sie Folgendes zu Ihrer Eingabe hinzu, indem Sie Folgendes zu Ihrer hinzufügen ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

86
2018-04-06 01:24



wenn Sie etwas über sudo Es erbt standardmäßig keine Umgebungsvariablen, einschließlich $STY. Aber $TERM  ist in der Regel in die sudo-Umgebung propagiert, also vielleicht nach beiden suchen $STY  oder  $TERM=="screen" - rcoup


Suchen $STY Das bietet Details, die screen verwendet, um mit sich selbst zu kommunizieren; $WINDOW wird dann der Strom sein screen Fensternummer.


14
2018-04-06 05:28





Der einfache Check, den ich normalerweise verwende, ist einfach zu treffen Strg-ein:

  • Wenn die Der Cursor springt zum Anfang der Zeile, Ich bin nicht im Inneren eine Bildschirmsitzung.

  • Ob nichts passiert, Ich weiß das Ich bin drin eine Bildschirmsitzung und ich habe gerade den Bildschirmkontrollschlüssel benutzt. Ich habe dann getroffen ein (zum Anfang der Zeile springen), w (aktuelle Bildschirmfenster anzeigen) oder einen anderen "harmlosen" Bildschirmbefehl ausführen, um zur Eingabeaufforderung zurückzukehren.

(Dies funktioniert natürlich nur, wenn Sie gerade eine bash oder eine andere Software ausführen, die "an den Anfang der Zeile springt" oder etwas Ähnliches harmlos macht, wenn Sie Strg-a drücken.)


13
2018-04-06 01:21



Dies funktioniert nur, wenn Ihre Bildschirmsteuerungs-Taste auf der Standard-Ctrl-a belassen wird. - ShreevatsaR
Drücken der Strg-Taste + DD würde loslassen und ssh beenden. Sie können diese Kombination für mehr Komfort treffen - akostadinov
Während die Antwort für die tatsächliche Frage in Ordnung ist, ist diese Methode nicht skriptfähig. - Nikodemus RIP


Gut, die meisten der Zeit (abwesend jemand versucht, mit Dingen zu schrauben) Ihr TERM wird auf eingestellt screen (oder zumindest erwähnen screen irgendwo).

Die einfache Lösung für das Problem ist nur Bildschirm überall ausgeführt werden. Verlasse das Haus nicht ohne es, sage ich.


7
2018-04-06 17:01



$TERM pflanzt sich typischerweise auch durch sudoDas ist ein Plus! - rcoup


Ich behalte das in meinem .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

Es ist nicht idiotensicher, aber wenn ich einen neuen Bildschirm erstelle, wird die Fensternummer in die Eingabeaufforderung eingefügt. Wenn ich nicht renne screenEs gibt keine Nummer.


7
2017-09-16 00:56





Ich habe einen noch cooleren Weg.

Fügen Sie Ihrer ~ / .screenrc Folgendes hinzu: Sie sehen unten eine Statuszeile (in invertiertem Text werden das Datum, die Uhrzeit und die Systemlast angezeigt. Weitere Escape-Codes finden Sie im Link zur Manpage unten.

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

Rufen Sie dies in einer Bildschirmsitzung mit ctrl-a:source ~/.screenrc.

Ich muss Kyle Rankin vom Linux Journal dafür danken. Sehen Sie seinen fantastischen Artikel bei http://www.linuxjournal.com/article/10950. Der man-Seitenbereich, auf den er sich bezieht, findet sich unter http://www.gnu.org/software/screen/manual/screen.html#String-Escapes.


3
2018-04-06 14:19





Sie könnten auch den Prozessbaum von abfragen $$ um zu sehen, ob Sie eine Bildschirminstanz finden. Die genaue Kette wird wahrscheinlich von Ihrem Setup abhängen - auf meiner OS X-Box, a zsh Inside-Bildschirm hat login als Elternteil, SCREEN als Großeltern, und screen wie seine Urgroßeltern.


2