Почему оболочка bash по умолчанию в Debian не имеет цвета?

Вопрос или проблема

Я искал, почему в стандартной оболочке Debian нет цвета, но не нашел ответа.

Почему оболочка Debian (bash) по умолчанию без цвета?

Почему оболочка Debian (bash) по умолчанию без цвета?

Из-за этого (из .bashrc на стандартной установке Debian, выделение мое):

# раскомментируйте для цветного приглашения, если терминал поддерживает это; по
# умолчанию отключено, чтобы не отвлекать пользователя: основной акцент
# в окне терминала должен быть на выводе команд, а не на приглашении
#force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
    # У нас есть поддержка цвета; предположим, что она соответствует Ecma-48
    # (ISO/IEC-6429). (Отсутствие такой поддержки крайне редко, и в таком
    # случае будет полезна поддержка setf, а не setaf.)
    color_prompt=yes
    else
    color_prompt=
    fi
fi

Другими словами, это “особенность” или, если хотите, дизайнерский выбор.

(Изначальная версия вопроса предполагала, что это касается оболочки root; я оставляю это здесь, так как это может быть полезно для пользователей, интересующихся именно этим.)

В случае root стандартное приглашение без цвета, потому что /etc/profile — или скорее, /etc/bash.bashrc — определяет очень простое приглашение:

# установите красивое приглашение (без цвета, перезаписав то, что в /etc/profile)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

и root’s default .bashrc не переопределяет это:

# Заметьте: PS1 и umask уже установлены в /etc/profile. Вам не нужно
# это, если вы не хотите другие значения по умолчанию для root.
# PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
# umask 022

Подробности см. в Откуда берутся /root/.bashrc и /root/.profile в системе Debian?.

Так как это был первый результат по запросу «как раскрасить оболочку root в debian», я публикую здесь мое решение: скопируйте и перезапишите /root/.bashrc файлом /etc/skel/bashrc.

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

Ниже приведены выдержки по раскраске ls, которые я подправлял с годами

alias la="LS_COLORS="mh=1;37" ls -A"
alias l="LS_COLORS="mh=1;37" ls -CF"
alias ll="LC_COLLATE=C LS_COLORS="mh=1;37" ls -lA --si --group-directories-first"

Я в итоге воспользовался предложением @daniel-sokolowski посмотреть на /etc/skel/.bashrc.

Но важно заметить, что согласно документации bash тест [ -z "$PS1" ] является общепринятым способом различать интерактивные и неинтерактивные оболочки.

Таким образом, когда вы добавляете

# часть из /etc/skel/.bashrc
...
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

вы передаете PS1= для любого типа оболочки, и это может сломать неинтерактивные команды, такие как

ssh your-server ls -la
bash completion on: scp ssh://foo:/bar/<TAB>
vim scp://your-server//some/file

Эти команды будут нарушены, когда будет происходить нежелательный вывод stdout из скриптов, предназначенных только для интерактивных оболочек.

Таким образом, полное решение заключается в оборачивании блока в тест [ ! -z "$PS1" ]

...
if [ ! -z "$PS1" ]; then
    if [ "$color_prompt" = yes ]; then
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    else
        PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
    fi
fi
unset color_prompt force_color_prompt

В Debian, я это настроил так:

Для пользователя:

vi ~/.bashrc

раскомментируйте:

#force_color_prompt=yes

Для новых пользователей:

vi /etc/skel/.bashrc

раскомментируйте:

#force_color_prompt=yes

Для root:

vi /etc/bash.bashrc

закомментируйте эту строку внутри цикла if:

#PS1=’${debian_chroot:+($debian_chroot)}\u@\h:\w$ ‘

и добавьте следующую строку ниже того же цикла if:

PS1=’${debian_chroot:+($debian_chroot)}[\033[01;31m]\u@\h[\033[00m]:[\033[01;36m]\w[\033[00m]$

В этой последней строке ’31’ относится к Красному, а ’36’ — к Голубому.

Дополнительная информация: цветовые коды

  • Черный 30
  • Красный 31
  • Зеленый 32
  • Коричневый 33
  • Синий 34
  • Фиолетовый 35
  • Голубой 36

.

Ответ или решение

Debian является одной из наиболее популярных и надежных операционных систем на основе ядра Linux. Один из наиболее часто задаваемых вопросов, касающихся этой системы, заключается в том, почему Bash в Debian по умолчанию отображается в цветах «по умолчанию» и не включает яркую цветовую схему, которая стала популярной в других дистрибутивах. Есть несколько существенных причин, объясняющих этот выбор.

Практичность и ясность

По умолчанию цветовая схема в Bash отключена, чтобы не отвлекать пользователя. Командная строка должна служить средством ввода команд и получения ответов в удобочитаемом формате. Используя текст без цветов, система ориентируется на практичность. Основное внимание уделяется результатам выполнения команды, а не яркому интерфейсу.

Способность пользователя адаптировать интерфейс

Debian предоставляет пользователям возможность самостоятельно настраивать систему. В файле .bashrc, который используется для настройки командной строки, существует опция для включения цветового интерфейса. Это логично, так как не все пользователи предпочитают цветные терминалы. Те же, кто заинтересован, могут просто раскомментировать строку force_color_prompt=yes, чтобы активировать цветовую схему.

Универсальность использования

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

Управление настройками для пользователя и администратора

Для администраторов безопаснее использовать менее отвлекающую цветовую гамму, особенно при выполнении критически важных задач, где важна повышенная концентрация. Тем не менее, если администратор решит использовать цвета, он может легко скопировать и заменить файл /root/.bashrc содержимым из /etc/skel/.bashrc, что предоставляет более полнофункциональный и цветной интерфейс командной строки.

Заключение

Таким образом, отсутствие цветной схемы в Bash по умолчанию в Debian — это осознанный выбор, нацеленный на предоставление пользователям надежной, понятной и настраиваемой рабочей среды. Пользователи же всегда могут адаптировать интерфейс под свои нужды, воспользовавшись предоставленными инструментами. Это отражает философию Debian, акцентирующую внимание на простоте, стабильности и надежности.

Оцените материал
Добавить комментарий

Капча загружается...