Ändern Sie die Eingabeaufforderungsfarbe je nach Benutzer oder Root in zsh

13

In zsh können Sie eine %#in Ihrer PS1(oder einer beliebigen PROMPTVariablen) haben, was im Grunde bedeutet, dass angezeigt wird, %ob Benutzer oder angezeigt wird, #wenn root. Ich frage mich , ob es eine Möglichkeit, dies so zu beeinflussen , dass die %oder #Farben ändert sich je nachdem , ob es sich um ein Benutzer oder root (ein für Root Rot, ein blau für Anwender) die offensichtliche Art und Weise ist nur die Änderungen PS1in meinem root ~/.zshrcaber wenn man bedenkt Dies ist bereits ein spezielles Symbol. Ich frage mich, ob es vielleicht keine Möglichkeit gibt, dasselbe PS1für beide zu verwenden. Etwas Bestimmtes %#für zsh (Ich bin sicher, es gibt andere Hacks, die ich auch gerne machen könnte) eine if then-Anweisung).

Xenoterracid
quelle

Antworten:

8

%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})

Das sollte funktionieren, um den Hostnamen ( %m) in einer anderen Farbe (rot) zu ändern, wenn Sie root sind. Ich habe keine zsh-Shell zum Testen, aber sie sieht korrekt aus.

Hier ist der Grund:

%(x.true.false):: Führen Sie basierend auf der Bewertung des ersten Terms des Ternärs die richtige Anweisung aus. '!' ist wahr, wenn die Shell privilegiert ist. In der Tat %#ist eine Abkürzung für %(!.#.%).

%{\e[1;31m%} %m %{\e[0m%}:: das %{\e[X;Ym%}ist die Farb-Escape-Sequenz mit X als Formatierung (fett, unterstrichen usw.) und Y als Farbcode. Beachten Sie, dass Sie die Sequenz um den Begriff herum öffnen und schließen müssen, um die Farbe zu ändern. Andernfalls hat alles nach diesem Punkt die gleiche Farbe. Ich habe hier Leerzeichen um den Begriff der Eingabeaufforderung eingefügt, um die %mÜbersichtlichkeit zu gewährleisten.

http://www.nparikh.org/unix/prompt.php enthält weitere Optionen und Details zu den Farbtabellen und anderen verfügbaren Optionen für zsh.

nzwulfin
quelle
6
autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "

%(#testet, ob die Shell als root ausgeführt wird. Wenn Sie dies ändern, wird %(!getestet, ob die Shell mit erhöhten Rechten ausgeführt wird (dies gilt für Dinge wie newgrp, aber nicht für die Anmeldung als Root).

Gilles 'SO - hör auf böse zu sein'
quelle