Как настроить .bashrc для настройки командной строки?

8

Есть ли простой способ изменить мою подсказку Bash, чтобы изменить цвета и какой текст отображается? Я слышал, что это сделано .bashrc, но я не нашел хороших и простых способов его изменить. Как цвета выражаются в Bash?

Нафтули Кей
источник
Обязательно просмотрите bash+prompt, хотя я не думаю, что у нас там есть учебник.
Жиль "ТАК - перестать быть злым"
2
В вики Arch Arch Linux есть хорошее руководство по настройке подсказки цветовой палитры , включая список цветов и несколько хороших примеров.
jasonwryan

Ответы:

4

Я когда-то имел те, определенные в моем .bashrc:

export e="\e["

function cls          { echo -n "${e}H${e}J${e}0m"; }
function rcls         { echo -n "${e}H${e}J${e}S${e}H${e}J${e}0m${e}u${e}J"; } # not quite yet !
# rcls only works when no funny codes have been issued in between, i.e. the buffer is clean
# below the current screen. And then there can be issues with the first line of the buffer.

function bright       { echo -n "${e}1m"; }
function normal       { echo -n "${e}0m"; }
function colour       { echo -n "${e}$1;$2;$3m"; }
function black        { echo -n "${e}30m"; }
function bg_black     { echo -n "${e}40m"; }
function red          { echo -n "${e}31m"; }
function bg_red       { echo -n "${e}41m"; }
function green        { echo -n "${e}32m"; }
function bg_green     { echo -n "${e}42m"; }
function yellow       { echo -n "${e}33m"; }
function bg_yellow    { echo -n "${e}43m"; }
function blue         { echo -n "${e}34m"; }
function bg_blue      { echo -n "${e}44m"; }
function magenta      { echo -n "${e}35m"; }
function bg_magenta   { echo -n "${e}45m"; }
function cyan         { echo -n "${e}36m"; }
function bg_cyan      { echo -n "${e}46m"; }
function white        { echo -n "${e}37m"; }
function bg_white     { echo -n "${e}47m"; }
function c_up         { echo -n "${e}$1A"; }
function c_down       { echo -n "${e}$1B"; }    # within
function c_right      { echo -n "${e}$1C"; }
function c_left       { echo -n "${e}$1D"; }    # screen
function c_pos        { echo -n "${e}$1;$2f"; } # [Hf]
function c_line       { echo -n "${e}$1d"; }
function screentop    { echo -n "${e}H"; }      # [Hdf]
function linetop      { echo -n "${e}G"; }
function buffertop    { echo -n "${e}u"; }      # depends on other control characters ?
function tab          { echo -n "${e}I"; }
function backtab      { echo -n "${e}Z"; }
function scrolldown   { echo -n "${e}$1T"; }    # within screen
function scrolldown_B { echo -n "${e}$1L"; }    # scroll down below cursor
function scrollup_B   { echo -n "${e}$1M"; }    # scroll up below cursor
function clear        { echo -n "${e}J"; }      # delete to end of screen
function cleanbuffer  { echo -n "${e}S"; }      # copies first screen to bottom and clears
                                                # everything else above the cursor.
#function xxx { echo -n "${e}xxx"; }

export -f bright normal colour
export -f black bg_black red bg_red green bg_green yellow bg_yellow
export -f blue bg_blue magenta bg_magenta cyan bg_cyan white bg_white
export -f c_up c_down c_right c_left c_pos c_line
export -f screentop linetop buffertop tab backtab
export -f scrolldown scrolldown_B scrollup_B clear cleanbuffer

Затем вы можете использовать их, например, с:

PS1_init="\n$(bright)$(black)$(hostname):\w\n$(bg_blue)"
PS1_end="$(normal)$(bright)\n\! -> $(normal)$(clear)"
export PS1="$PS1_init"'$(date)'"$PS1_end"

Это может помочь вам.

Причина, по которой я превратил их в функции, а не в переменные, заключается в лени. Я просто хотел отказаться от печати. Конечно, если вы ищете переменные эффективности, было бы лучше.

В конце дня они подходят только для определенных терминалов. Поэтому для любой помощи обратитесь к документации вашего терминала, а не к bash или любой другой оболочке в этом отношении.

asoundmove
источник
Одно из лучших определений bashrc, которое я видел до сих пор!
theTuxRacer
1
Переменные сэкономили бы при наборе: bright=$'\e1m'и так далее. (Если вам не нужна совместимость с очень старыми версиями, у которых не было $'…'синтаксиса.)
Жиль "ТАК - прекрати быть злым"
@ Жиль, вы не поняли: я предпочитаю печатать blueв командной строке (или в сценарии оболочки), чем echo $blue.
asoundmove
2

Bash использует цветовую схему Ansi - статья в Википедии: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors

Например, вот моя подсказка: (Мне нравится моя подсказка в отдельной строке, но не все так. Кроме того, мои термины имеют темный фон - настройте цвета, если ваши термины светлые.)

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[31m\]\h \[\e[0;36m\]\t \[\e[93m\]\w\[\e[36m\] p$$-\!-\$\[\e[0m\]\n\$ '

Специальные значения приглашений описаны на странице руководства Bash в разделе «Подсказки»:

\u  the username of the current user
\h  the hostname up to the first `.'
\t  the current time in 24-hour HH:MM:SS format
\w  the current working  directory,  with 
    $HOME  abbreviated with  a tilde
    (uses the value of the PROMPT_DIRTRIM variable)
$$  PID of the Bash (helps distinguish my many terms.
    Useful, eg, if I have to kill something.
\!  the history number of this command
\n     newline
\$  if the effective UID is 0, a #, otherwise a $
LenW
источник
1
Bash не использует цветовую схему ANSI. Это терминал, который реализует escape-коды. Bash будет работать на любом терминале, поэтому может быть лучше использовать tput setf _n_код выхода для установки цвета переднего плана.
Camh
0

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

Просто добавьте следующую строку:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

Предварительный просмотр: введите описание изображения здесь

Это мои любимые цвета. Вы можете настроить цвет каждой части приглашения, изменив mкоды (например 34m), которые являются цветовыми кодами ANSI.

Список цветовых кодов ANSI:

  • Черный: 30 м
  • Красный: 31м
  • Зеленый: 32м
  • Желтый: 33м
  • Синий: 34м
  • Фиолетовый: 35м
  • Голубой: 36м
  • Белый: 37м
Шаян Амани
источник
0

Ни один из этих ответов не помог мне узнать, как работает быстрая настройка. Вот что я собрал за несколько часов поиска по различным форумам, стекам, вики и т. Д.

Найдите свою подсказку

nano ~/.bashrc

Поиск в bashrcFOR PS1, либо вручную , либо с Alt + F . Это первая подсказка bash, которую вы видите, когда вводите команду. PS[2-4]также существуют, но они используются редко.

Определить цвета

Выше PS1линии добавьте эти определения цвета:

# Color Variables
c1='\[\033[0;30m\]' # Non-bold color 1
C1='\[\033[1;30m\]' # Bold color 1
c2='\[\033[0;31m\]' # Non-bold color 2
C2='\[\033[1;31m\]' # Bold color 2
c3='\[\033[0;32m\]' # Non-bold color 3
C3='\[\033[1;32m\]' # Bold color 3
c4='\[\033[0;33m\]' # Non-bold color 4
C4='\[\033[1;33m\]' # Bold color 4
c5='\[\033[0;34m\]' # Non-bold color 5
C5='\[\033[1;34m\]' # Bold color 5
c6='\[\033[0;35m\]' # Non-bold color 6
C6='\[\033[1;35m\]' # Bold color 6
c7='\[\033[0;36m\]' # Non-bold color 7
C7='\[\033[1;36m\]' # Bold color 7
c8='\[\033[0;37m\]' # Non-bold color 8
C8='\[\033[1;37m\]' # Bold color 8
NC='\[\033[0m\]'    # Back to default color

Настроить цвета

Теперь, когда вы находитесь в вашем (предположительно графическом) терминале, у вас должна быть опция настройки. Например, я использую Konsole KDE : Settings > Edit Current Profile... > Appearance > Edit...показывает этот интерфейс настройки:

Настройка цветов Konsole

Теперь измените их на любые цвета, которые вам нравятся. Ваш передний план - это ваш цвет по умолчанию, и вы можете выбрать цвета 1 ~ 8. Не то, чтобы определения основывались на 0, тогда как эта настройка и ваши переменные основаны на 1.

Используйте цвета в вашем приглашении

Для моего приглашения по умолчанию у меня есть:

PS1="[\u@\h \W]\$ "

\uВаш у sername, \hВаш час ostname, \Wявляется W здесь вы ( в каком каталоге), и \$это приглашение штуковины ( #при Идентификатор_пользователе = 0 [корень]).

Вы можете настроить это, добавив $c1$ c2` и т. Д. Перед цветом, который вы хотите изменить. Например, у меня есть:

PS1="$c2[$C8\u$c2@$C7\h $C6\W$c2]$C2\$$NC "

Это приводит к:

Мой bash подскажите

Примечание. В NCконце необходимо использовать его, чтобы сбросить его до цвета по умолчанию, иначе все после вашего приглашения (вашего ввода) будет таким, каким будет последний цвет в вашем приглашении.

Raymo111
источник