Ich habe ein freigegebenes Basisverzeichnis, das über NFS auf allen UNIX-Servern, bei denen ich mich anmelde, automatisch bereitgestellt wird. Ich hätte gerne eine einzige .screenrc-Datei, die (zum Beispiel) den Hostnamen in einer anderen Farbe in die hardstatus-Zeile einfügt, um anzuzeigen, wann ich bei der Produktion angemeldet bin. Unsere Hostnamen sind so beschaffen, dass dies durch die Verwendung von Pattern Matching leicht möglich ist.
Gibt es eine Möglichkeit, bedingte Anweisungen in .screenrc einzufügen? Ein kurzer Blick auf die Manpage scheint nichts Offensichtliches zu verraten.
BEARBEITEN:
Zur Verdeutlichung habe ich bereits eine benutzerdefinierte feste Statuszeile. Ich möchte einige der angezeigten Farben / Felder basierend auf dem Hostnamen ändern, auf dem der Bildschirm aufgerufen wird. Ich habe bereits so etwas für meine PS1, aber ich würde dies lieber in der Bildschirmstatuszeile tun, wenn ich von diesen Hosts zu Routern / Switches springe, wodurch ich keine sofortige Einfärbung vornehmen kann. Auf diese Weise kann ich ein Fenster für die Produktion und eines für die Entwicklung haben, wobei die Farbe der Bildschirmstatuszeile auf einen Blick angibt, auf welchem ich mich befinde.
quelle
Antworten:
Ich sehe zwei Möglichkeiten, dies zu tun. Die erste besteht darin, eine .screenrc-Datei nach Host zu erstellen.
Wie
.screenrc_serverA
,.screenrc_serverB
...In der Shell - Startskript setzen screenrc um so etwas wie
.screenrc_`hostname`
Selbstverständlich können Sie die Quelle Befehl Bildschirm verwenden so etwas wie schließen
.screenrc_default
in jedem benutzerdefinierten .screenrc_ ... Dateien so , dass sie nur eine Beschriftung / hard Zeile enthalten und nicht die ganze Konfiguration jedes Mal.Die zweite Möglichkeit wäre, Befehle wie
screen -X hardstatus lastline ...
(mithilfe von if-Tests, um den Befehl mit einem unterschiedlichen Wert für ... abhängig vom Hostnamen auszuführen) in Ihrem Shell-Startskript auszuführen. Wenn Sie sich auf dem Server anmelden, wird Bildschirm -X nichts tun, da Bildschirm noch nicht gestartet wird, aber jedes Mal, wenn Sie ein neues Fenster auf dem Bildschirm öffnen, wird der Hardstatus aktualisiert.Natürlich ist die erste Lösung besser, da die zweite die Hardstatuszeile jedes Mal aktualisiert, wenn Sie ein Nachrichtenfenster öffnen. Dies ist wahrscheinlich nutzlos, da sich der Hostname nicht geändert hat.
quelle
hostname
". Ich habe ein Problem damit, "in den Post@radius ist genau richtig mit dem SCREENRC-Ding, aber es war keine sehr vollständige Antwort, also werde ich näher darauf eingehen ...
~ / .bashrc
* Verwenden Sie immer neue Tests !
Ein Wort zu Fluchtcharakteren
Die korrekte Art, Farben in Skripten einzubeziehen, ist die Verwendung von tput und nicht von Escape-Zeichen. Ihre Escape-Zeichen sind spezifisch für Ihr Terminal. Der Befehl tput ist terminalfähig. Ich habe das geschrieben, wenn ich Lust auf meine Skripte habe:
~ / bin / COLORS.sh
Ich habe auch ein Skript erstellt, um die Verwendung von tput zu demonstrieren. Sie können es von diesem Kern erhalten.
Siehe:
http://www.ibm.com/developerworks/aix/library/au-learningtput/?S_TACT=105AGY06
http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x405.html
quelle
setaf
verwendet wird, obwohl es sein solltesetab
( b statt f ) und das zweite, dass die Verwendung9
als Standard bei mir nicht funktioniert, vielleicht weil die tput-Version nicht Standard ist (auch nicht in Sein Fall oder meiner, ich weiß es einfach nicht und es ist nicht wirklich wichtig)Stellen Sie es einfach in Ihrem .screenrc als die Variable hardstatus ein. Solange Sie eine Variable wie% H für den Hostnamen verwenden, wird diese so geändert, dass sie mit jedem Hostnamen übereinstimmt, den Sie bearbeiten.
Gibt Ihnen eine Statuszeile am unteren Rand, die aussieht
Hostname ist rot auf schwarz, Uhrzeit ist grün auf schwarz, Datum ist gelb auf schwarz. Das mit * gekennzeichnete Fenster ist das aktuelle Fenster und wird in blauer Schrift auf weißem Hintergrund angezeigt. Fenster markiert mit - ist das zuvor aktive Fenster, angezeigt wird weißer Text auf schwarz. Fenster 1 oben ist weder aktuell noch früher und wird in Weiß auf Schwarz angezeigt. Die anderen Möglichkeiten zeigen Ihnen andere Benutzer an, die an Windows angeschlossen sind, weiß auf schwarz und mit + gekennzeichnet sind.
Die Zeitanzeige hilft auch dabei, das System am Leben zu halten, wenn Sie den Bildschirm auf Remote-Servern ausführen, da die sich jede Minute ändernde Zeit Ihre Sitzung am Leben hält, selbst wenn die Shell auf der Remote-Seite inaktiv ist.
quelle
Sie können die Statuszeile innerhalb eines Backtick-Skripts durch Drucken
\005{..r}
oder ähnliches (r
für Rot usw. genau wie innerhalb des Skripts.screenrc
selbst) einfärben. Sie können also entweder den Hostnamen hashen, um eine Zahl zu erhalten, oder nur eine Reihe von bedingten Anweisungen festlegen die Farbe. Im Folgenden finden Sie ein Skript zum Ändern der Farbe und zum Drucken des Hostnamens zur Verwendung auf dem Bildschirm:Anschließend fügen Sie dem einen Eintrag für dieses Skript hinzu
.screenrc
und referenzieren ihn innerhalb des Hardstatus oder der Beschriftung als% 4`:Dies setzt voraus, dass sich der Hostname wahrscheinlich nicht ändert, daher das Zeitlimit und die Gültigkeit von 1 Stunde (3600 Sekunden). Die Bits, die den Aufruf zum Backtick selbst umgeben, setzen lediglich das Datum am Anfang der Zeile und die Zeit nach dem Hostnamen.
Sie können diesen Mechanismus sogar verwenden, um die Ausgabe eines Skripts abhängig vom Wert des Akkuladezustands, der Systemlast oder der Temperatur einzufärben, vorausgesetzt, Sie haben über ein Shell-Skript Zugriff auf die entsprechenden Werte.
quelle
screen
Escape\005
- auf diese Weise kann die gesamte bedingte Formatierung in ein viel besser lesbares Shell-Skript eingefügt werden, anstatt in das bereits schwer zu analysierendecaption
bzw.hardstatus
Bildschirmanweisungen.Wenn Sie viele Skripte vermeiden möchten, können Sie Folgendes versuchen:
grep gibt den Hostnamen nur dann aus, wenn er mit "prod" übereinstimmt. Sie können ihn also an ein Backtick und das
%?
Konstrukt anschließen. Viola!quelle