Wie wird der Sitzungsname des Bildschirms in den Hardstatus aufgenommen?


17

Ich benutze verschiedene Screen Sessions für verschiedene Projekte. Startbildschirm gefällt screen -S project1. Nun möchte ich 'project1' in der Hardstatuszeile erwähnen.

Sitzungsname kann von Umgebungsvariablen RZA erhalten: STY=13539.project1.
Aber wie kommt das auf den Bildschirm? Ich habe den Befehl backtick und% `im Hardstatus ausprobiert, aber ich kann ihn scheinbar nicht richtig verstehen.

Was ich getan habe:

.screenrc:

hardstatus string '%H:%`'
backtick 0 30 30 echo $STY

kein Glück, leer% `.

backtick 0 30 30 sessionname

Noch kein Glück, Sitzungsname: Nicht gefunden

Antworten:


18

Sie können diese Zeichenfolge (auf Wunsch mit zusätzlichen Informationen) in Folgendes einfügen $PS1:

\[\e]0;$STY\007

innerhalb von einfachen Anführungszeichen, um die Auswertung der Variablen zu verzögern. Dann fügen Sie dies zu Ihrem hinzu ~/.screenrc:

hardstatus string '%H:%h'

Leider screennicht $STYin der Umgebung der Befehle festgelegt, die es für die backtickFunktion erzeugt.

Eine andere Option anstelle der obigen:

hardstatus string '%H:%`'
backtick 0 30 30 sh -c 'screen -ls | grep --color=no -o "$PPID[^[:space:]]*"'

Der Vorteil dieses sessionnameBefehls ist, dass er Änderungen folgt, die mit dem Befehl vorgenommen wurden. Bei der ersten Option ist dies nicht der Fall.

Bearbeiten:

Von hier :

Da $ STY noch nicht festgelegt ist, wenn Bildschirmquellen .screenrc sind, können Sie diesen Trick in Ihrem .screenrc verwenden:

    screen 
    screen $SHELL -c 'screen -X caption always "$STY"' 

Dh senden Sie einen Bildschirmbefehl an das erste Fenster.


1
Für die Lösung, die mit backtick(1.) beginnt, ist backtickeine Bash eingebaut? ein gnu-screen befehl? eine binäre ausführbare Datei? gibt es eine manpage (2.) Ich weiß, dass es funktioniert, weil ich es ausprobiert habe, aber wie kann man einen zweizeiligen Befehl ausführen, wenn es so aussieht, als ob die gnu-screen- .screenrcSyntax eine Zeile für den hardstatusBefehl erfordert ? (3.) Wie würde ich Ihren Befehl ändern, damit nach dem Sitzungsnamen ein Text angehängt werden kann?
Trevor Boyd Smith

@ TrevorBoydSmith: backtickist ein screenBefehl. Suchen Sie in der Manpage nach screen. Es ist möglicherweise am besten, wenn Sie eine neue Frage zum Rest Ihrer Fragen stellen. Ich glaube nicht, dass die Hardstatus-Ausgabe zwei Zeilen auf dem Bildschirm belegen kann. Sie können sedoder awkanstelle dessen verwenden grep, um das zu tun, was grepin meinem Beispiel geschieht, und auch zusätzlichen Text anhängen.
Bis auf weiteres angehalten.

Wenn ich "zwei Zeilen" sagte, lassen Sie mich wiederholen, was ich meinte, ich möchte keine zweizeilige Anzeige für den Hardstatus. Ich war durch das %` und das backtickWesen in getrennten Zeilen verwirrt ... sie sahen nicht verwandt aus, aber jetzt, da ich die Dokumentation lese,backtick sehe ich, dass die beiden verwandt / notwendig / gültige Syntax sind (wenn auch ziemlich seltsame Syntax IMO).
Trevor Boyd Smith

3

Bei mir %Sklappt das problemlos mit dem Einfügen in den Hardstatus.

MWE (.screenrc):

hardstatus on
hardstatus alwayslastline
hardstatus string "%S"

Dies zeigt jedoch den Sitzungsnamen ohne die ID (wie ${STY#*.}) an; in Ihrem Beispiel: project1.

(Gleiche Antwort auf andere Fragen hier und hier der Vollständigkeit halber).


2
Zu Ihrer Information: "% S" funktioniert auf neueren Versionen von gnu-screen (funktioniert auf Fedora 21 für mich), aber nicht auf älteren Versionen (funktioniert nicht auf CentOS 6 für mich).
Trevor Boyd Smith
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.