zsh
Spróbuj tego:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Oto podział pytania:
- PROMPT_SUBST włącza podstawianie poleceń w wierszu poleceń (oraz interpretację parametrów i interpretację arytmetyczną)
%{...%}
- sekwencja ucieczki
$(pwd|grep --color=always /)
- wydrukuj bieżący katalog i podświetl /
- kolor będzie zależeć od zmiennej środowiskowej $ GREP_COLORS (lub jej wartości domyślnej) - domyślnie pogrubiona czerwień
%${#PWD}G
- użyj długości w znakach nazwy bieżącego katalogu jako wartości usterki. To sprawia, że powłoka bierze to pod uwagę długość poprzedzającej sekwencji znaków (po „ %{
”) zamiast rzeczywistej długości ciągu zawierającego sekwencje specjalne ANSI. Dzięki temu powłoka nie jest mylona co do pozycji kursora względem końca monitu.
- - - - - - - to koniec części, która odpowiada na twoje pytanie - - - - - - -
%(!.%F{red}.%F{cyan})
- jeśli jest to uprzywilejowana powłoka (root), ustaw kolor pierwszego planu na czerwony, w przeciwnym razie cyjan
%n
- wypisuje nazwę użytkownika
%f
- przywróć domyślny kolor pierwszego planu
@
- dosłowny znak
%F{yellow}
- uczynić kolor pierwszego planu żółtym
%m
- wypisz nazwę hosta
%f
- przywróć domyślny kolor pierwszego planu
%(!.%F{red}.)
- jeśli jest to uprzywilejowana powłoka (root), ustaw kolor pierwszego planu na czerwony
%#
- wypisuje a #
dla uprzywilejowanej powłoki lub %
dla nieuprzywilejowanej powłoki
%f
- przywróć domyślny kolor pierwszego planu
Kładę nacisk na ścieżkę na pierwszym miejscu, ponieważ pytanie dotyczy ścieżki.
Oto wersja dla zsh, która zmienia kolor ukośnika w zależności od tego, czy jesteś rootem (uprzywilejowanym) poprzez manipulowanie $GREP_COLORS
zmienną:
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 '
Grzmotnąć
Możesz zrobić podobny monit w Bash. W tym przykładzie umieściłem nazwę użytkownika i hosta na pierwszym miejscu, a kolor ukośników również zmienia się, gdy UID ma wartość 0. Ostrzeżenie: to zastępuje $PS1
zmienną zachęty Basha . Nie powinno to stanowić problemu, chyba że robisz coś specjalnego lub nie spodziewasz się, że zachowanie zmieni się, gdy ustawisz tę zmienną bezpośrednio, a to nastąpi. Ponadto wykorzystuje zmienną o nazwie „ usercolor
”, która może kolidować z czymś innym, chociaż cała ta rzecz mogłaby zostać umieszczona w funkcji, a zmienna deklarowana jako lokalna.
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\] "'
Skorzystałem z faktu, że Bash nie ma funkcji „glitch” zsh, aby użyć podstawiania rozszerzenia parametru do warunkowego pokolorowania ukośników (zamiast używania grep).