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_COLORSzmienną:
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 $PS1zmienną 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).