Я прочитал эту замечательную статью о настройке приглашения bash:

http://blog.superuser.com/2011/09/21/customizing-your-bash-command-prompt/

Я также читал об использовании 256 цветов в bash:

http://www.logilab.org/blogentry/20255

Теперь вот как выглядит мой .bashrc:

# Extended 256 colors
ext-color() {
    echo -ne "\[\033[38;5;$1m\]$2\[\033[m\]"
}

# Set a fancy prompt
PS1="`ext-color 172 \u` in `ext-color 172 $(pwd)`"

Это очень близко к оранжевой подсказке, но имя пользователя не печатается. Вместо этого это выглядит так:

u in /home/dave

Как я могу изменить это, чтобы напечатать имя пользователя текущего пользователя? Я имею в виду, как это:

dave in /home/dave

2 ответа2

2

Это намного проще, чем ты думаешь. Когда вы запускаете команду ext-color 172 \u (как часть установки PS1 или самостоятельно), оболочка анализирует \u , удаляя то, что она считает неуместным \ , перед тем, как передать ее в ext-color как $2 . Решение простое: заключите его в кавычки перед передачей в ext-color:

PS1="$(ext-color 172 '\u') in $(ext-color 172 '\w')"

(Обратите внимание, что я также заменил обратные кавычки на $( ) , использовал \w вместо $(PWD) и заключил в кавычки '\w' по той же причине, что и '\u' .)

1

Адаптируя подход, который, кажется, работает во второй части приглашения, попробуйте, например:

PS1="`ext-color 172 $(whoami)` in `ext-color 172 $(pwd)`"

или даже проще:

PS1="`ext-color 172 $USER` in `ext-color 172 $(pwd)`"

или даже лучше

PS1="$(ext-color 172 "$USER") in $(ext-color 172 "$(pwd)")"

Последняя версия не будет обрезать часть после потенциального пробела в текущем каталоге из-за кавычек вокруг вызова pwd .


РЕДАКТИРОВАТЬ: Это не будет обновлять рабочий каталог, как отмечено в комментарии. Я даже не думал об этом, так как вопрос специально задавался о пользовательской части (уже поздно :-)).

Самый простой ("правильный", "только") способ - просто написать

PS1='\[\033[38;5;172m\]\u\[\033[m\] in \[\033[38;5;172m\]\w\[\033[m\]'

и пропустить определение функции в целом.


Расширение: чтобы переменная PS1 динамически расширяла вызовы функций, используйте обратную косую черту, чтобы препятствовать преждевременной оценке:

PS1="$(ext-color 172 "\$USER") in $(ext-color 172 "\$PWD")"

должно сработать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .