ЗШ
Попробуй это:
setopt PROMPT_SUBST
PROMPT='%{$(pwd|grep --color=always /)%${#PWD}G%} %(!.%F{red}.%F{cyan})%n%f@%F{yellow}%m%f%(!.%F{red}.)%#%f '
Вот разбивка подсказки:
- PROMPT_SUBST включает подстановку команд в приглашении (и расширение параметров и арифметическое расширение)
%{...%}
- escape-последовательность
$(pwd|grep --color=always /)
- распечатать текущий каталог и выделить /
- цвет будет зависеть от переменной среды $ GREP_COLORS (или ее значения по умолчанию) - по умолчанию выделен полужирный красный
%${#PWD}G
- использовать длину в символах имени текущего каталога в качестве значения сбоя. Это заставляет оболочку учитывать это длину предыдущей последовательности символов (после « %{
») вместо фактической длины строки, которая включает escape-последовательности ANSI. Это предохраняет оболочку от путаницы относительно положения курсора относительно конца подсказки.
- - - - - - - это конец части, которая отвечает на ваш вопрос - - - - - - -
%(!.%F{red}.%F{cyan})
- если это привилегированная оболочка (root), установите цвет переднего плана на красный, в противном случае - голубой
%n
- вывести имя пользователя
%f
- сбросить цвет переднего плана на значение по умолчанию
@
- буквальный знак
%F{yellow}
- сделать цвет переднего плана желтым
%m
- вывести имя хоста
%f
- сбросить цвет переднего плана на значение по умолчанию
%(!.%F{red}.)
- если это привилегированная оболочка (root), установите цвет переднего плана на красный
%#
- вывести #
для привилегированной оболочки или %
для непривилегированной
%f
- сбросить цвет переднего плана на значение по умолчанию
Я ставлю путь первым в этой подсказке для акцента, так как вопрос касается пути.
Вот версия для zsh, которая меняет цвет косой черты в зависимости от того, являетесь ли вы пользователем root (привилегированным), манипулируя переменной $GREP_COLORS
:
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. В этом примере я сначала указал имя пользователя и хоста, а цвет слешей также меняется, когда UID равен 0. Предупреждение: это перезаписывает переменную приглашения Bash $PS1
. Это не должно быть проблемой, если вы не делаете что-то особенное или не ожидаете, что поведение изменится, когда вы установите эту переменную напрямую, и это действует. Кроме того, здесь используется переменная с именем « usercolor
», которая может конфликтовать с чем-то другим, хотя все это можно поместить в функцию, а переменная объявлена как локальная.
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\] "'
Я воспользовался тем, что в Bash нет функции "сбоя" в zsh, чтобы использовать подстановку расширения параметров для условного окрашивания слешей (вместо использования grep).