Der "Bildschirm" bezieht sich auf ein Programm , das unter Herstellen einer Verbindung zu einer getrennten SSH-Sitzung beschrieben wird . Das ist eine gute Einrichtung.
Aber es gibt eine Frage, die ich wirklich gerne wissen würde. Woher weiß ich, ob ich in einem "Bildschirm" laufe? Der Unterschied ist:
- Wenn ja, weiß ich, dass ich das aktuelle Terminalfenster sicher schließen kann, z. B. ein PuTTY-Fenster, ohne meine Shell-Sitzung (Bash usw.) zu verlieren.
- Wenn nein, muss ich anstehende Arbeiten erledigen, 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.
linux
gnu-screen
Jimm Chen
quelle
quelle
Antworten:
(Gestohlen von " Wie kann ich feststellen, ob ich auf einem Bildschirm bin? " Über StackOverflow und verfasst von Benutzer jho . PS Sie können nicht für ein Duplikat auf allen StackExchange- Websites stimmen.)
Überprüfen Sie
$STY
. Wenn es null ist, befinden Sie sich in einem "echten" Terminal. Wenn es etwas enthält, ist es der Name des Bildschirms, auf dem Sie sich befinden.Wenn Sie nicht auf dem Bildschirm sind:
Wenn Sie auf dem Bildschirm sind:
Wenn Sie tmux anstelle von screen verwenden, überprüfen Sie dies ebenfalls
$TMUX
. Fügen Sie Folgendes zu Ihrer Eingabeaufforderung hinzu~/.bashrc
:quelle
sudo
standardmäßig keine Umgebungsvariablen übernommen, einschließlich$STY
. Aber wird typischerweise auf die sudo - Umgebung propagiert, vielleicht so überprüfen Sie entweder oder$TERM
$STY
$TERM=="screen"
Suchen Sie nach
$STY
Details,screen
die für die Kommunikation mit sich selbst verwendet werden.$WINDOW
wird dann die aktuellescreen
Fensternummer sein.quelle
Die einfache Prüfung ist ich in der Regel verwenden , um einfach auf Ctrl- a:
Wenn der Cursor zum Zeilenanfang springt, befinde ich mich nicht in einer Bildschirmsitzung.
Wenn nichts passiert , weiß ich, dass ich mich in einer Bildschirmsitzung befinde und gerade die Bildschirmsteuerungstaste verwendet habe. Ich drücke dann a(springe zum Zeilenanfang), w(zeige aktuelle Bildschirmfenster an) oder führe einen anderen "harmlosen" Bildschirmbefehl aus, um zur Eingabeaufforderung zurückzukehren.
(Dies funktioniert natürlich nur, wenn Sie gerade Bash oder eine andere Software ausführen, die "an den Anfang der Zeile springt", oder wenn Sie die Tastenkombination Strg-a drücken, ist dies äquivalent harmlos.)
quelle
Nun, die meiste Zeit (wenn jemand nicht versucht, mit Dingen zu schrauben) wird Ihr
TERM
aufscreen
(oder zumindestscreen
irgendwo erwähnen ) eingestellt sein.Die einfache Lösung des Problems besteht darin, den Bildschirm überall auszuführen. Verlasse das Haus nicht ohne es, sage ich.
quelle
$TERM
pflanzt sich auch typischerweise durchsudo
, was ein Plus ist!Ich behalte dies in meinem
.bashrc
:Es ist nicht kinderleicht, aber wenn ich einen neuen Bildschirm erstelle, wird die Fensternummer in die Eingabeaufforderung eingefügt. Wenn ich nicht renne
screen
, gibt es keine Nummer.quelle
Ich habe einen noch cooleren Weg.
Fügen Sie Folgendes zu Ihrem ~ / .screenrc hinzu, und Sie sehen eine Statuszeile unten (in invertiertem Text Datum, Uhrzeit und Systemlast). Weitere Escape-Codes finden Sie im Manpage-Link unten.
Quelle dies, wenn in einer Bildschirmsitzung mit
ctrl-a:source ~/.screenrc
.Dafür muss ich mich bei Kyle Rankin vom Linux Journal bedanken. Siehe seinen fantastischen Artikel unter http://www.linuxjournal.com/article/10950 . Den Manpage-Abschnitt, auf den er verweist, finden Sie unter http://www.gnu.org/software/screen/manual/screen.html#String-Escapes .
quelle
Sie können auch den Prozessbaum von erneut durchsuchen, um festzustellen,
$$
ob Sie eine Bildschirminstanz finden. Die genaue Kette hängt wahrscheinlich von Ihrem Setup ab - auf meiner OS X-Box hat einzsh
Innenbildschirmlogin
als Elternteil,SCREEN
als Großelternteil undscreen
als Urgroßelternteil.quelle