zsh
Versuche dies:
setopt PROMPT_SUBST PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F.%F)%n%f@%F%m%f%(!.%F.)%#%f '
Hier ist eine Aufschlüsselung der Eingabeaufforderung:
- PROMPT_SUBST aktiviert die Befehlsersetzung in der Eingabeaufforderung (und Parametererweiterung und Arithmetikerweiterung)
%{...%}
- eine Escape-Sequenz$(pwd|grep --color=always /)
- Drucken Sie das aktuelle Verzeichnis und markieren Sie das./
- Die Farbe hängt von der Umgebungsvariablen $ GREP_COLORS (oder ihrem Standardwert) ab. Fettgedruckt ist der Standard%${#PWD}G
- Verwenden Sie die Länge in Zeichen des Namens des aktuellen Verzeichnisses als Störschubwert. Die Shell berücksichtigt dabei die Länge der vorangehenden Zeichenfolge (nach dem "%{
") anstelle der tatsächlichen Länge der Zeichenfolge, die ANSI-Escape-Sequenzen enthält. Dies verhindert, dass die Shell bezüglich der Position des Cursors relativ zum Ende der Eingabeaufforderung verwechselt wird.
- - - - - - - Dies ist das Ende des Teils, der Ihre Frage beantwortet. - - - - - - -%(!.%F.%F)
- Wenn es sich um eine privilegierte Shell (Root) handelt, setzen Sie die Vordergrundfarbe auf Rot, andernfalls Cyan%n
- den Benutzernamen ausgeben%f
- Setzen Sie die Vordergrundfarbe auf die Standardeinstellung zurück@
- ein wörtliches Zeichen%F
- machen Sie die Vordergrundfarbe gelb%m
- den Hostnamen ausgeben%f
- Setzen Sie die Vordergrundfarbe auf die Standardeinstellung zurück%(!.%F.)
- Wenn dies eine privilegierte Shell (Root) ist, setzen Sie die Vordergrundfarbe auf Rot%#
- a#
für eine privilegierte Shell oder%
für eine nicht privilegierte Shell ausgeben%f
- Setzen Sie die Vordergrundfarbe auf die Standardeinstellung zurück
Ich habe den Pfad zuerst in diese Aufforderung zur Betonung gestellt, 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 sind (privilegiert), 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.%F)%n%f@%F%m%f%(!.%F.)%#%f '
Bash
Sie können eine ähnliche Eingabeaufforderung in Bash ausführen. In diesem Beispiel habe ich zuerst den Benutzer und den Hostnamen angegeben, und die Farbe der Schrägstriche ändert sich auch, wenn die UID 0 ist. Warnung: Dadurch wird die $PS1
Eingabeaufforderungsvariable von Bash überschrieben . Das sollte kein Problem sein, es sei denn, Sie tun etwas Besonderes oder erwarten, dass sich das Verhalten ändert, wenn Sie diese Variable direkt setzen und dies wirksam ist. Außerdem wird eine Variable namens " usercolor
" verwendet, die mit etwas anderem kollidieren kann, obwohl das Ganze in eine Funktion eingefügt werden kann und die Variable als lokal deklariert werden kann.
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\]:$$usercolor\\$\[\033[0m\] "'
Ich habe die Tatsache ausgenutzt, dass Bash nicht über die "Störschub" -Funktion von zsh verfügt, um die Parametererweiterung zu verwenden, um die Schrägstriche bedingt zu färben (anstelle von grep).