Anzeigen des Sitzungsnamens und des Fenstertitels des GNU-Bildschirms in der Shell-Eingabeaufforderung

11

Gibt es eine Möglichkeit, den Namen der GNU-Bildschirmsitzung und den Fenstertitel in der Eingabeaufforderung der Shell anzuzeigen (sagen wir, die durch definierte Bash-Eingabeaufforderung PS1)?

brandizzi
quelle

Antworten:

14

Der Bildschirm liefert einige Umgebungsvariablen (aus screen(1) Manpage):

STY              Alternate socket name.
WINDOW           Window number of a window (at creation time).

"Zur Erstellungszeit" bedeutet, dass, wenn Sie ein Fenster neu nummerieren (mit dem numberBefehl des Bildschirms ), die Shell nicht über die Änderung informiert wird und $ WINDOW immer noch mit der ersten Fensternummer identisch ist.

Sie könnten etwas verwenden wie:

PS1='\u@\h(${STY}:${WINDOW}):\w$ '
Arcege
quelle
1
Perfekt! Das habe ich gesucht. Übrigens, gibt es eine Möglichkeit, den Fenstertitel anstelle der Fensternummer zu erhalten?
Brandizzi
Nicht dass ich wüsste, es gibt keine API für den Bildschirm, und wenn Sie Befehle ausgeben, gibt es keine Ausgabe - es geht zum aktuellen Fenster auf dem Bildschirm. Zum Beispiel screen -xr 2466 -X windows.
Arcege
Gibt es eine Möglichkeit, auf den Namen des Fensters zuzugreifen, wenn es mit festgelegt ist, obwohl es wahrscheinlich unter die Umnummerierung fällt Ctrl-a A?
Thalis K.
1
Wenn GNU screenmit der -QOption (Abfrage) kompiliert wurde , können Sie einige Befehle ausführen, z. B. titleund, windowsund die Datenanzeige muss jedoch ohne nachgestellten Zeilenumbruch stdout angezeigt werden.
Arcege
3

Ich verwende immer genaue Namen von Bildschirmsitzungen. Dann kann ich PS1 die STY env var des Bildschirms hinzufügen, bei der die numerische ID entfernt wurde (danke dimo414). Ich dekoriere es nicht mit geschweiften Klammern oder so, weil ich nicht immer in einer Sitzung bin. Einfaches Beispiel:

PS1='\u@\h ${STY#[0-9]*.} \w$ '
Moodboom
quelle
1

Ich benutze das:

(`echo ${STY} | sed -e 's/[0-9]*\.//g'`:${WINDOW}:`screen -Q title`)

Entfernt die Prozessnummer aus ${STY}
enthält die Fensternummer (wie "zur Erstellungszeit" erwähnt)
enthält den Fenstertitel (wie von zurückgegeben screen -Q title)

Anmerkungen:

  • screen -QWenn es zum ersten Mal ausgeführt wird, wartet es auf einen Tastendruck
  • Ich habe den Fenstertitel mit Ca CA festgelegt und dann mein .profile als Quelle verwendet, um die Eingabeaufforderung zu aktualisieren
gotjosh
quelle
4
Durch ${STY#[0-9]*.}die Verwendung wird vermieden, dass ein Rohr durchgeleitet werden muss sed.
dimo414