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