Gibt es eine Möglichkeit, die Bash-Eingabeaufforderung dynamisch zu gestalten, sodass sie ihre Farbe ändert, wenn sie auf einem Server angemeldet ist?
Daher möchte ich, dass die Farbe auf meinem System grün und auf rot wechselt, wenn eine Verbindung zu Servern besteht. Ich habe eine riesige Anzahl von Servern, auf denen ich nicht anders arbeiten möchte .bashrc
.
Antworten:
Die Remote-Eingabeaufforderung wird von der Fernbedienung festgelegt
~/.bashrc
. Sie müssen es also noch auf den Remote-Server kopieren. Sie können jedoch einen einzigen~/.bashrc
für alle Hosts verwenden und die Eingabeaufforderungsfarbe basierend auf dem Hostnamen festlegen:Anmerkungen:
Nicht festlegen,
PS1
wenn es nicht bereits festgelegt ist (dh, wenn die Shell nicht interaktiv ist). Das Testen, obPS1
nicht leer ist, ist eine sehr häufige Methode, um zu entscheiden, ob die Shell interaktiv ist, und Sie möchten Programme, die dies tun, nicht verwirren. (Vermutlich ist es ein genauerer Test, zu prüfen, ob er$-
enthälti
.)Wenn Sie möchten, dass dieser Code bei der Anmeldung an einem Remoteserver ausgeführt wird, sollten Sie immer eine der Profildateien als Quelle haben
~/.bashrc
. Aber ich nehme an, Sie wissen das.In
PS1
müssen die Escape-Codes eingeschlossen sein\[...\]
.\[033[m
Setzt Vordergrund und Hintergrund auf Standard zurück. Also hier:\w
im Terminal Vordergrund / Hintergrund erscheinen.\[033[48;5;XXXm\033[38;5;YYYm
Setzt den Hintergrund / Vordergrund aufXXX
/YYY
.Versuchen Sie es mit einem Skript, das die verfügbaren Farben ausgibt
colortest
.So überprüfen Sie, wie die Eingabeaufforderung aussehen würde:
quelle
Wenn Sie nicht wollen (können), dass die Fernbedienungen eine separate haben
PS1
, dann würde ich "nein" sagen, es wäre zumindest schrecklich schwierig. Bedenken Sie, dass die lokale Seite bei einer SSH-Verbindung keine wirkliche Vorstellung davon hat, was eine Shell-Eingabeaufforderung und was etwas anderes ist, und dass das Festlegen der Farben für die Eingabeaufforderung daher wirklich von der Fernbedienung kommen muss. Sie können Farben vor dem Starten der Sitzung festlegen, sie sind jedoch für alle Ausgaben wirksam, dh bis einls
oder ein Editor eigene Farben festlegt.Natürlich könnte man sich einen Wrapper für die Sitzung einfallen lassen, um alles, was wie eine Eingabeaufforderung aussieht, zu erkennen und einzufärben, aber es würde leicht zu falschen Positiven führen (Farbe in jeder Zeile mit einem
$
?) Und wäre schrecklich kompliziert im Vergleich zum Ablegen von a einzelne Linie zu Ihrem.profile
oder.bashrc
auf jeder Maschine.Bei einer Reihe von Computern kann es in jedem Fall hilfreich sein, nach Lösungen zu suchen, um Konfigurationsänderungen auf allen Computern zu synchronisieren. Sei es ein Werkzeug, das dafür gemacht wurde, oder einfach ein Skript oder einfach eine Schleife, um eine (Reihe von) Konfigurationsdatei (en) auf alle zu kopieren.
quelle
Ich verwende ein Wrapper-Skript mit sshpass, das zuerst ein temporäres Profil und dann ssh mit diesem Profil hochlädt (und die temporäre Datei löscht).
Die zwei Hauptpunkte des Skripts sind:
scp ~/.bash_remote "${USER}"@"${IP}":/tmp/.bash_tmp 1>/dev/null
ssh -t "${USER}"@"${IP}" "bash --rcfile /tmp/.bash_tmp; rm /tmp/.bash_tmp"
Hiermit können Sie einfach die Farben der Remote-Sitzungen definieren.
Ich weiß, dass dies Ihre Frage nicht direkt beantwortet, aber es könnte verwendet werden, um sie zu lösen.
quelle
sshpass -p
wenn überhaupt möglich! Befehlszeilenargumente für die Ausführung von Programmen sind in der Regel für alle Benutzer in sichtbar. Diesps
gilt auch für das Kennwort. Auch wenn Sie keine anderen Benutzerkonten auf dem Gerät haben, können Sie diese versehentlich auf dem Bildschirm ausdrucken.sshpass
kann das Kennwort von einer Umgebungsvariablen lesen, die nicht zu schwer zu verwenden ist. Ziehen Sie auch ssh-Schlüssel in Betracht, wenn Sie die Anmeldeinformationen trotzdem in einer Datei speichern möchten.Es könnte Sie interessieren
context-color
, was ich genau für diesen Zweck zusammengestellt habe: https://github.com/ramnes/context-colorEs ist ein einfaches Skript, das bei der Ausführung eine Farbe basierend auf dem Hash einer Befehlsausgabe ausgibt. Wenn es irgendwo in Ihrem System installiert ist
$PATH
, können Sie Folgendes in Ihrem System tun.bashrc
:(Wo
--prompt/-p
befindet sich der Schalter, damit die Farbe für Eingabeaufforderungen maskiert wird, und in\[\e[0m\]
der Maskierungssequenz wird die Farbe zurückgesetzt)Standardmäßig lautet der Befehl zum Generieren des Hashs
whoami; hostname
. Wenn Sie nur möchten, dass sich die Farbe entsprechend dem Hostnamen ändert, können Sie die$CONTEXT
variable Umgebung ändern (export CONTEXT="hostname"
) oder einfach die--context/-c
Option verwenden (context-color -c "hostname"
).Ein Beispiel finden Sie unten:
quelle