Изменить цвет конкретной буквы в имени пользователя в bash PS1

9

Я хочу изменить цвет конкретной буквы в моем имени пользователя, отображаемой PS1 в bash.

Например: Если мой \uесть rahul, я хотел бы письмо , hчтобы быть в синем цвете и отдых , чтобы быть белыми.

Я знаю , что \uотносится к имени пользователя и добавление цвета к целой «сущности» делаются путем добавления тегов , как: [\033[38;5;15m\].

Если это возможно, могу ли я знать, как сделать то же самое.

Рахул Бхарадвадж
источник

Ответы:

13

Если вы не возражаете против использования \uescape, вы можете сделать это так:

PS1="\[\e[0;31m\]${USER:0:1}\[\e[m\]${USER:1} "

Это установит приглашение только имя пользователя и пробел. Первый символ имени пользователя будет красным. Это работает, расширяя $USERпеременную дважды с определенным диапазоном. Первый раз это диапазон от 0 до 1. Второй раз это от 1 (второй символ) до конца.

Чтобы получить приглашение, как вы просили, используйте это:

PS1="${USER:0:2}\[\e[0;34m\]${USER:2:1}\[\e[m\]${USER:3} "
Себастьян Старк
источник
1
Вы можете просто опустить длину, чтобы вывести всю строку, начинающуюся со смещения : ${USER:1}для всего имени пользователя, кроме первого символа. Отличное решение! Можете ли вы также показать, как изменить цвет третьего персонажа в соответствии с запросом OP?
десерт
1
Можно проверить , что такие вещи , как с echo -e, напримерecho -e "${USER:0:2}\e[0;34m${USER:2:1}\e[m${USER:3} "
десерт
2
Должно ли это работать с разными именами пользователей (например, выделить 3-ю букву для всех)? Если это только для вас, более простой подход состоит в том, чтобы просто жестко закодировать буквы вашего имени пользователя, например, raвместо ${USER:0:2}, и т. Д.
egmont
Жесткое кодирование @egmont почти никогда не является лучшим способом, но, по общему признанию, часто проще. Таким образом, вы можете сбросить код в глобальном конфигурационном файле или поделиться им с другими. И это обрабатывает случай, когда ваша учетная запись переименована.
Себастьян Старк,
1
Лично я делю свою собственную конфигурацию оболочки между тремя учетными записями с разными именами. Но, возможно, мы не должны входить в философию здесь :)
Себастьян Старк