zsh
Versuche dies:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Hier ist eine Aufschlüsselung der Eingabeaufforderung:
- PROMPT_SUBST aktiviert die Befehlsersetzung in der Eingabeaufforderung (und Parametererweiterung und arithmetische Erweiterung)
%{...%}
- eine Fluchtsequenz
$(pwd|grep --color=always /)
- Das aktuelle Verzeichnis drucken und markieren. /
- Die Farbe hängt von der Umgebungsvariablen $ GREP_COLORS (oder ihrem Standardwert) ab. - Die Standardeinstellung ist Fettrot
%${#PWD}G
- Verwenden Sie die Länge des Namens des aktuellen Verzeichnisses in Zeichen als Störimpuls. Dies veranlasst die Shell, dies als die Länge der vorhergehenden Zeichenfolge (nach dem " %{
") anstelle der tatsächlichen Länge der Zeichenfolge zu betrachten, die ANSI-Escape-Folgen enthält. Dies verhindert, dass die Shell über die Position des Cursors relativ zum Ende der Eingabeaufforderung verwirrt wird.
- - - - - - - das ist das Ende des Teils, der Ihre Frage beantwortet - - - - - -
%(!.%F{red}.%F{cyan})
- Wenn es sich um eine privilegierte Shell (Root) handelt, setzen Sie die Vordergrundfarbe auf Rot, andernfalls auf Cyan
%n
- Benutzernamen ausgeben
%f
- Setzen Sie die Vordergrundfarbe auf die Standardfarbe zurück
@
- ein wörtliches Zeichen
%F{yellow}
- mach die Vordergrundfarbe gelb
%m
- den Hostnamen ausgeben
%f
- Setzen Sie die Vordergrundfarbe auf die Standardfarbe zurück
%(!.%F{red}.)
- Wenn dies eine privilegierte Shell (root) ist, setzen Sie die Vordergrundfarbe auf rot
%#
- Geben Sie a #
für eine privilegierte Shell oder %
für eine nicht privilegierte Shell aus
%f
- Setzen Sie die Vordergrundfarbe auf die Standardfarbe zurück
Ich habe den Pfad an erster Stelle in dieser Eingabeaufforderung zur Betonung gesetzt, da die Frage den Pfad betrifft.
Hier ist eine Version für zsh, die die Farbe des Schrägstrichs ändert, je nachdem, ob Sie root (privilegiert) sind, indem Sie die $GREP_COLORS
Variable bearbeiten:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|([[ $EUID == 0 ]] && GREP_COLORS="mt=01;31" grep --color=always /|| GREP_COLORS="mt=01;34" grep --color=always /))%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Bash
Sie können eine ähnliche Eingabeaufforderung in Bash ausführen. In diesem Beispiel habe ich den Benutzer- und Hostnamen an die erste Stelle gesetzt und die Farbe der Schrägstriche ändert sich auch, wenn die UID 0 ist. Warnung: Dadurch wird die $PS1
Eingabeaufforderungsvariable von Bash überschrieben . Dies sollte kein Problem sein, es sei denn, Sie tun etwas Besonderes oder Sie erwarten, dass sich das Verhalten ändert, wenn Sie diese Variable direkt festlegen und dies in Kraft tritt. Dies verwendet auch eine Variable mit dem Namen "usercolor
" verwendet, die mit etwas anderem kollidieren kann, obwohl das Ganze in eine Funktion gestellt und die Variable als local deklariert werden könnte.
PROMPT_COMMAND='usercolor="\[\033[0;36m\]";[[ $EUID == 0 ]] && usercolor="\[\033[1;31m\]";PS1="$(pwd)";PS1="$usercolor\u\[\033[0m\]@\[\033[0;33m\]\h\[\033[0m\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Ich habe die Tatsache ausgenutzt, dass Bash nicht über zshs "Glitch" -Funktion verfügt, um die Parametererweiterungsersetzung zu verwenden, um die Schrägstriche bedingt einzufärben (anstatt grep zu verwenden).