зш
Спробуйте це:
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 вмикає підстановку команд у підказці (та розширення параметрів та арифметичне розширення)
%{...%}
- послідовність втечі
$(pwd|grep --color=always /)
- надрукуйте поточний каталог та виділіть /
- колір залежатиме від змінної середовища $ GREP_COLORS (або від його значення за замовчуванням) - червоний жирний шрифт - за замовчуванням
%${#PWD}G
- використовувати довжину в символах імені поточного каталогу як значення глюка. Це змушує оболонку вважати це довжиною попередньої послідовності символів (після " %{
") замість фактичної довжини рядка, що включає послідовності відбору ANSI. Це запобігає плутанню оболонки щодо положення курсора щодо кінця підказки.
- - - - - - - це кінець частини, яка відповідає на ваше запитання - - - - - - -
%(!.%F{red}.%F{cyan})
- якщо це пільгова оболонка (корінь), встановіть колір переднього плану червоним, інакше синім
%n
- вивести ім'я користувача
%f
- скидання кольору переднього плану до типового
@
- буквальний на знак
%F{yellow}
- зробити колір переднього плану жовтим
%m
- вивести ім'я хоста
%f
- скидання кольору переднього плану до типового
%(!.%F{red}.)
- якщо це пільгова оболонка (корінь), встановіть колір переднього плану червоним
%#
- вивести a #
для пільгової оболонки або %
для непривілейованої
%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. Попередження: це перезаписує $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\]:${PS1//\//$usercolor/\[\033[0m\]}$usercolor\\$\[\033[0m\] "'
Я скористався тим, що у Bash немає функції "glitch" zsh, щоб використовувати підстановку розширення параметрів, щоб умовно забарвити косої риски (замість використання grep).