Ich bin mit Ubuntu und kann manuell ändern bash
Shell - Prompt Farbe grün mit
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
Ich möchte jedoch, dass sich die Farbe der Shell-Eingabeaufforderung automatisch ändert, wenn ich ein neues Terminal oder eine neue Registerkarte öffne. Mir ist bekannt, dass der Basis-Tty-TERM 16 Farben hat und es in Ordnung ist, die Farben zu drehen, wenn mehr als 16 Terminals geöffnet sind. Funktioniert die Lösung auch, wenn ich eine Verbindung herstelle Putty
, tmux
oder screen
.
Meine Idee ist es, ein Shell-Skript zu schreiben und es zu platzieren .bashrc
, das die neue Terminalsitzung erkennt, die der Benutzer geöffnet hat, und einen globalen Zähler von \e[0;31m[
bis zu erhöhen \e[0;47m[
. Wie erkennt man die Anzahl der vom Benutzer geöffneten Terminals?
quelle
tty
. Ich denke, wir / andere haben uns zu sehr auf diese "Frage" konzentriert und vergessen, dass es andere Lösungen für das gesamte "Bedürfnis" geben könnte :) Ich würde sogar mit der Implementierung einer zufälligen Farbauswahl spielen. Wenn es 256 Farben sind, sollte die Auswahl derselben / ähnlicher Farben nicht viel passieren. Das manuelle Einstellen der Farben für bestimmte Punktnummern führt jedoch zu einer besseren Personalisierung.color="\e[38;5;"$(((RANDOM % 231 )+1))"m"
(nur 231, um Graustufen abzulehnen), aber viele dieser Farben waren zufällig nur verschiedene Farbtöne und einige davon sind dunkel, so dass sie möglicherweise fast unsichtbar sind, und ich glaube, niemand wird das im wirklichen Leben verwenden ...In einer Einzelbenutzersituation können wir am Beispiel
xterm
einfach die Anzahl der Pids von zählenxterm
;xterm
Erstellt für jedes Fenster eine eigene PID.gnome-terminal
Es wird jedoch eine einzelne PID ausgeführt. Die gute Nachricht ist jedoch, dass für jedes Fenster und / oder jede Registerkarte ein untergeordneter Prozess erstellt wird. Wir können diese untergeordneten Prozesse mit dem folgenden Befehl abrufen:Es gibt jedoch einige Komplikationen:
Wenn Sie Ihre Frage lesen, können wir davon ausgehen, dass der Benutzer in diesem Fall tatsächlich Eigentümer der x-Sitzung ist . Normalerweise können wir einfach die
$USER
-variable verwenden, aber dies stimmt möglicherweise nicht mit dem aktuell angemeldeten Benutzer von überein$DISPLAY
.In einer Mehrbenutzersituation gehören Pids, die zur (entweder welche) Terminalanwendung gehören, nicht unbedingt zum aktuellen
$DISPLAY
. Wir müssen nur die relevanten Pids und Child-Pids aufteilen.Wenn sich in Unity (15.10 oder niedriger) ein zweiter Benutzer anmeldet, wird ein zusätzlicher Prozess gestartet (
gnome-pty-helper
), der als untergeordneter Prozess angezeigt wirdgnome-terminal
, aber der Prozess hat (offensichtlich) kein Fenster oder keine Registerkarte. Auf Mate existiert der Prozess trotzdem.Zusamenfassend
Um die Anzahl der Registerkarten und / oder Fenster einer Terminalanwendung zu zählen, müssen wir:
$DISPLAY
(x-Sitzung).$DISPLAY
gnome-pty-helper
wird, um die Nummer zu korrigieren.Dies kann jedoch sehr gut per Skript ausgeführt werden, um die Anzahl der aktuell geöffneten Fenster und / oder Registerkarten zuverlässig zu ermitteln.
Das Skript
Im folgenden Skript wird die Zielterminalanwendung als Argument verwendet . Das Skript funktioniert auf vielen Terminals, auf denen ich es getestet habe. Eine Ausnahme ist
Tilda
in diesem Moment.Ein Beispiel
gnome-terminal
Fenstern, einen (den im Bild) mit dreignome-terminal
Fenstern und zweixterm
Fenster.Der Befehl:
Ausgänge:
während
Ausgänge:
Das Skript
Benutzen
Kopieren Sie das Skript in eine leere Datei, speichern Sie es unter
get_terms.sh
, machen Sie es ausführbar und führen Sie es mit dem folgenden Befehl aus:quelle
gnome-pty-helper
läuft immer eines , auch wenn nur ein Benutzer angemeldet ist (direkt nach dem Neustart) und wenn ich eine beliebige Anzahl von Terminals öffne, läuft es als zweiter, derselbe Helfer. Ihr neues Skript scheint für Mate-Terminal zu funktionieren (konnte dieses Null-Ding nicht verursachen), aber mit xterm wird, wenn ich nur 1 geöffnet habe,0
erst nach dem zweiten und mit gnome-terminal eine gute Nummer angezeigt es wird immer eins zu weniger angezeigt (Ausgabe,0
wenn nur eines geöffnet ist).Ein
awk
Weg:Erläuterung:
Im obigen 1-Liner-Befehl
awk
wird der Zählerstand des Terminals ermittelt. Innerhalb desawk
Programms wird lediglich die Anzahl der von who zurückgegebenen Zeilen überprüft - 1.quelle
who | awk 'END{print NR - 1}'
Da Sie möchten, ist die Anzahl der Zeilen - 1.Ein einfacher Weg kann auch darin bestehen, nur auszuführen
System Monitor
(wenn Sie vom Terminal aus starten , müssen Sie schreibengnome-system-monitor
) und auf der Registerkarte "Prozesse" die laufenden Prozesse nach Namen zu ordnen und dann die Anzahl der VorkommenBash
in der Liste zu zählen (sie werden alle zusammen sein, wenn Sie nach arrangieren Name, so ist es einfach zu zählen).Beachten Sie, dass Sie suchen müssen
Bash
und nicht,Gnome Terminal
wenn Sie die Anzahl der geöffneten Terminals nach Benutzer anzeigen möchten. Sobald Sie ein Terminal öffnen,Gnome Terminal
wird es auch in der Prozessliste angezeigt, bleibt jedoch auch dann eines, wenn mehrere Terminals geöffnet werden. Mit der Schaltfläche "Anzeigen" inSystem Monitor
können Sie festlegen, welche Prozesse angezeigt werden sollen, z. Alle Prozesse / Benutzerprozesse / Aktiv ...quelle