Как изменить цвет терминала linux

Небольшое руководство и простой bash скрипт, чтобы сделать вывод вашего кода немного более ярким и красочным Обычно вывод текста в терминале пользователя выгляд...

Время прочтения
10 мин

Просмотры 12K

Небольшое руководство и простой bash скрипт, чтобы сделать вывод вашего кода немного более ярким и красочным

Обычно вывод текста в терминале пользователя выглядит слишком монохромно. Однако добавить больше красок — совсем несложно. В данном скрипте я предлагаю вспомогательные методы для вывода текста, использования заданных цветов и работы с окнами терминала в тёмном и светлом режимах.

⬇️ Скачать color.zip — 2.7 KB (прим. редактора — потребуется регистрация на сайте)

Введение

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

Добавление цвета к выводу текста в терминале — простая задача, которая заключается в выводе правильных управляющих символов перед вашим текстом.

Цвета в терминале

Чтобы вывести цветной текст, вам следует выполнить printf или echo -e управляющих символов для требуемого цвета (-e обеспечивает интерпретацию управляющих символов), далее вывести ваш текст, а затем (просто для аккуратности) сбросить вывод обратно к значениям по умолчанию. В таблице ниже приведены коды:

и код сброса 33[0m

Формат строки для основного цвета:

"33[" + "<0 or 1, meaning normal or bold>;" + "<color code> + "m"

И для фона:

"33[" + "<color code>" + "m"

Эти коды могут быть использованы вместе для одновременного изменения основного цвета и фона.

Применяем код

Простой пример красного текста:

printf "33[91mThis is red text33[0m"

Пример красного текста на белом фоне:

printf "33[91m33[107mThis is red text on a white background33[0m"

Это выглядит довольно громоздко, так что я создал несколько простых подпрограмм, которые позволят задать цвет текста более изящным способом.

Вспомогательные функции

Следующие вспомогательные функции позволяют вам делать такие вещи, как:

WriteLine "This is red text" "Red"
WriteLine "This is red text on a white background" "Red" "White"

… намного проще.

useColor="true" # Установите значение на false, если вы обнаружите, что ваша среда плохо обрабатывает цвета.

# Возвращает код цвета для заданных цветов переднего/заднего плана
# Этот код передаётся эхом в терминал перед выводом текста
# для создания цветного вывода.
#
# строка foreground (основной цвет) имя_цвета. Необязательна, если не задан фон.
#        По умолчанию "Default", который использует системный цвет по умолчанию
# строка background (фон) имя_цвета. Необязательна. По умолчанию используется $color_background
#        который устанавливается на основе текущего фона терминала.
# возвращает строку
function Color () {

    local foreground=$1
    local background=$2

    if [ "$foreground" == "" ];  then foreground="Default"; fi
    if [ "$background" == "" ]; then background="$color_background"; fi

    local colorString='33['

    # Основные цвета
    case "$foreground" in
        "Default")      colorString='33[0;39m';;
        "Black" )       colorString='33[0;30m';;
        "DarkRed" )     colorString='33[0;31m';;
        "DarkGreen" )   colorString='33[0;32m';;
        "DarkYellow" )  colorString='33[0;33m';;
        "DarkBlue" )    colorString='33[0;34m';;
        "DarkMagenta" ) colorString='33[0;35m';;
        "DarkCyan" )    colorString='33[0;36m';;
        "Gray" )        colorString='33[0;37m';;
        "DarkGray" )    colorString='33[1;90m';;
        "Red" )         colorString='33[1;91m';;
        "Green" )       colorString='33[1;92m';;
        "Yellow" )      colorString='33[1;93m';;
        "Blue" )        colorString='33[1;94m';;
        "Magenta" )     colorString='33[1;95m';;
        "Cyan" )        colorString='33[1;96m';;
        "White" )       colorString='33[1;97m';;
        *)              colorString='33[0;39m';;
    esac

    # Цвета фона
    case "$background" in
        "Default" )     colorString="${colorString}33[49m";;
        "Black" )       colorString="${colorString}33[40m";;
        "DarkRed" )     colorString="${colorString}33[41m";;
        "DarkGreen" )   colorString="${colorString}33[42m";;
        "DarkYellow" )  colorString="${colorString}33[43m";;
        "DarkBlue" )    colorString="${colorString}33[44m";;
        "DarkMagenta" ) colorString="${colorString}33[45m";;
        "DarkCyan" )    colorString="${colorString}33[46m";;
        "Gray" )        colorString="${colorString}33[47m";;
        "DarkGray" )    colorString="${colorString}33[100m";;
        "Red" )         colorString="${colorString}33[101m";;
        "Green" )       colorString="${colorString}33[102m";;
        "Yellow" )      colorString="${colorString}33[103m";;
        "Blue" )        colorString="${colorString}33[104m";;
        "Magenta" )     colorString="${colorString}33[105m";;
        "Cyan" )        colorString="${colorString}33[106m";;
        "White" )       colorString="${colorString}33[107m";;
        *)              colorString="${colorString}33[49m";;
    esac

    echo "${colorString}"
}


# Выводит строку (включая перевод на строку) на терминал, используя заданные основной или фоновый 
# цвета
#
# строка The text to output (Текст для вывода). Необязательна, если не задан основной цвет. По умолчанию выводится только перевод на строку.
# строка Foreground color name (Имя основного цвета). Необязательна, если не указан фон. По умолчанию "Default", который
#        использует системное значение по умолчанию
# строка Background color name (Имя фонового цвета). Необязательна. По умолчанию используется $color_background, который устанавливается на основе
#        текущего фона терминала
function WriteLine () {

    local resetColor='33[0m'

    local str=$1
    local forecolor=$2
    local backcolor=$3

    if [ "$str" == "" ]; then
        printf "n"
        return;
    fi

    # Обратите внимание на использование форматного заполнителя %s. Это позволяет нам передавать "--" в качестве строк без ошибок
    if [ "$useColor" == "true" ]; then
        local colorString=$(Color ${forecolor} ${backcolor})
        printf "${colorString}%s${resetColor}n" "${str}"
    else
        printf "%sn" "${str}"
    fi
}

# Выводит строку без перевода на строку в терминал, используя заданные основные / фоновые цвета
#
# строка The text to output (Текст для вывода). Необязательна, если не задан основной цвет. По умолчанию выводится только перевод на строку.
# строка Foreground color name (Имя основного цвета). Необязательна, если не указан фон. По умолчанию "Default", который
#        использует системное значение по умолчанию
# строка Background color name (Имя фонового цвета). Необязательна. По умолчанию используется $color_background, который устанавливается на основе
#        текущего фона терминала
function Write () {
    local resetColor="33[0m"

    local forecolor=$1
    local backcolor=$2
    local str=$3

    if [ "$str" == "" ];  then
        return;
    fi

    # Обратите внимание на использование форматного заполнителя %s. Это позволяет нам передавать "--" в качестве строк без ошибок
    if [ "$useColor" == "true" ]; then
        local colorString=$(Color ${forecolor} ${backcolor})
        printf "${colorString}%s${resetColor}" "${str}"
    else
        printf "%s" "$str"
    fi
}

Работа с тёмным и светлым режимами

Во многих дистрибутивах Linux и Unix терминал имеет чёрный фон и белый текст. В macOS по умолчанию используется белый фон с чёрным текстом. Конечно, есть способы и средства для смены тёмного/светлого режима, но вам придется проверять и тестировать всё на собственной системе, чтобы найти то, что подходит именно вам.

Я предполагаю, что если мы используем mac, то можем всё протестировать напрямую, в противном случае — мы предполагаем черный фон и белый текст. Я также стараюсь придерживаться цветов по умолчанию, а там, где мне нужно немного цвета, я предпочитаю использование некоторых предопределённых цветов, которые, по моим представлениям, будут хорошо работать везде.

# Получает цвет фона терминала. Это очень наивная догадка
# возвращает триплет RGB, значения от 0 до 64K
function getBackground () {

    if [[ $OSTYPE == 'darwin'* ]]; then
        osascript -e 
        'tell application "Terminal"
            get background color of selected tab of window 1
        end tell'
    else

        # См. https://github.com/rocky/shell-term-background/blob/master/term-background.bash
        # для получения исчерпывающей информации о том, как проверить цвет фона. Сейчас мы просто
        # предположим, что терминалы, не использующие macOS, имеют чёрный фон.

        echo "0,0,0" # здесь мы делаем предположения
    fi
}

# Определяет, находится ли текущий терминал в тёмном режиме (тёмный фон, светлый текст).
# возвращает "true", если работает в тёмном режиме; false в противном случае
function isDarkMode () {

    local bgColor=$(getBackground)
    
    IFS=','; colors=($bgColor); IFS=' ';

    # Фон более или менее тёмный?
    if [ ${colors[0]} -lt 20000 ] && [ ${colors[1]} -lt 20000 ] && [ ${colors[2]} -lt 20000 ]; then
        echo "true"
    else
        echo "false"
    fi
}

Как только мы получим приблизительное представление о том, с чем имеем дело, я выполню код ниже:

darkmode=$(isDarkMode)

# Установим некоторые предопределённые цвета. Обратите внимание, что мы не можем достоверно определить фон
# цвет терминала, поэтому мы избегаем специально устанавливать чёрный или белый цвет в качестве основного цвета
# или фона. Вы всегда можете просто использовать "Белый" и "Чёрный", если вам действительно нужно
# это сочетание, но предварительно тщательно протестируйте
if [ "$darkmode" == "true" ]; then
    color_primary="Blue"
    color_mute="Gray"
    color_info="Yellow"
    color_success="Green"
    color_warn="DarkYellow"
    color_error="Red"
else
    color_primary="DarkBlue"
    color_mute="Gray"
    color_info="Magenta"
    color_success="DarkGreen"
    color_warn="DarkYellow"
    color_error="Red"
fi

и также воспользуюсь этими строками:

WriteLine "Predefined colors on default background"
WriteLine

WriteLine "Default colored text" "Default"
WriteLine "Primary colored text" $color_primary
WriteLine "Mute colored text"    $color_mute
WriteLine "Info colored text"    $color_info
WriteLine "Success colored text" $color_success
WriteLine "Warning colored text" $color_warn
WriteLine "Error colored text"   $color_error

WriteLine
WriteLine "Default color on predefined background"
WriteLine

WriteLine "Default colored background" "Default"
WriteLine "Primary colored background" "Default" $color_primary
WriteLine "Mute colored background"    "Default" $color_mute
WriteLine "Info colored background"    "Default" $color_info
WriteLine "Success colored background" "Default" $color_success
WriteLine "Warning colored background" "Default" $color_warn
WriteLine "Error colored background"   "Default" $color_error

Получаем примерно такую картину в классическом терминале Linux:

И такую в macOS:

Всё немного запутано, поэтому давайте добавим ещё одну функцию, которая обеспечит контрастный передний план на любом выбранном нами фоне:

# Возвращает имя цвета, который будет служить в качестве основного контрастного
# цвета для заданного цвета фона. Эта функция предполагает, что $darkmode был
# установлен глобально.
#
# строка background color name (имя фонового цвета).
# возвращает строку, представляющую имя основного контрастного цвета
function ContrastForeground () {

    local color=$1
    if [ "$color" == "" ]; then color="Default"; fi

    if [ "$darkmode" == "true" ]; then
        case "$color" in
            "Default" )     echo "White";;
            "Black" )       echo "White";;
            "DarkRed" )     echo "White";;
            "DarkGreen" )   echo "White";;
            "DarkYellow" )  echo "White";;
            "DarkBlue" )    echo "White";;
            "DarkMagenta" ) echo "White";;
            "DarkCyan" )    echo "White";;
            "Gray" )        echo "Black";;
            "DarkGray" )    echo "White";;
            "Red" )         echo "White";;
            "Green" )       echo "White";;
            "Yellow" )      echo "Black";;
            "Blue" )        echo "White";;
            "Magenta" )     echo "White";;
            "Cyan" )        echo "Black";;
            "White" )       echo "Black";;
            *)              echo "White";;
        esac
    else
        case "$color" in
            "Default" )     echo "Black";;
            "Black" )       echo "White";;
            "DarkRed" )     echo "White";;
            "DarkGreen" )   echo "White";;
            "DarkYellow" )  echo "White";;
            "DarkBlue" )    echo "White";;
            "DarkMagenta" ) echo "White";;
            "DarkCyan" )    echo "White";;
            "Gray" )        echo "Black";;
            "DarkGray" )    echo "White";;
            "Red" )         echo "White";;
            "Green" )       echo "Black";;
            "Yellow" )      echo "Black";;
            "Blue" )        echo "White";;
            "Magenta" )     echo "White";;
            "Cyan" )        echo "Black";;
            "White" )       echo "Black";;
            *)              echo "White";;
        esac
    fi
    
    echo "${colorString}"
}

Затем, в подпрограмме Color, мы можем сделать следующее:

function Color () {

    local foreground=$1
    local background=$2

    if [ "$foreground" == "" ]; then foreground="Default"; fi
    if [ "$background" == "" ]; then background="$color_background"; fi

    if [ "$foreground" == "Contrast" ]; then
        foreground=$(ContrastForeground ${background})
    fi
    
    ...

… и чтобы сделать наш текст с изменённым цветом фона немного более разборчивым, мы используем следующие строки:

WriteLine
WriteLine "Default contrasting color on predefined background"
WriteLine

WriteLine "Primary colored background" "Contrast" $color_primary
WriteLine "Mute colored background"    "Contrast" $color_mute
WriteLine "Info colored background"    "Contrast" $color_info
WriteLine "Success colored background" "Contrast" $color_success
WriteLine "Warning colored background" "Contrast" $color_warn
WriteLine "Error colored background"   "Contrast" $color_error

Полученный результат в терминале Linux

… и в терминале macOS


НЛО прилетело и оставило здесь промокод для читателей нашего блога:

— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

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

В рамках данной статьи будет рассказано как изменить цвет в терминале Linux на примере Ubuntu и Gnome. А еще вы узнаете, как можно создать несколько профилей и быстро переключаться между ними, например, для дневного и ночного времени суток.

Для начала откройте окно терминала, одновременно нажав на клавиатуре Ctrl + Shift + T. Откройте контекстное меню с помощью соответствующей иконки, расположенной рядом с поиском, а затем кликните по пункту Параметры.

h52evdPIAAAAASUVORK5CYII=

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

AoAAAAASUVORK5CYII=

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

yZqIOLL3UgAAAABJRU5ErkJggg==

А с помощью инструмента Пипетка можно взять цвет любой точки на экране и применить его. Его удобно сочетать с палитрой, расположенной в нижней части окна.

Также вы отдельно можете настроить цвета для выделенного текста и фона, полужирного шрифта и курсора мыши, если активируете соответствующие пункты.

f2wytTdIpGBUAAAAAElFTkSuQmCC

А ниже идет настройка прозрачности окна терминала. Если отключить параметр Use transparency from system theme, активировать Use transparent background и отрегулировать нижний ползунок, то получится такой результат:

x8nDFQhoL2uWwAAAABJRU5ErkJggg==

Самая последняя настройка Выделение жирного текста тоже может оказаться полезной. Ее имеет смысл включить, если жирный текст не станет некомфортным для чтения. А теперь разберемся с созданием профилей с разными настройками.

Профили параметров терминала

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

f0UCbULHl3PvAAAAAElFTkSuQmCC

Теперь посетите вкладку Цвета и настройте все параметры по своему усмотрению. А для быстрого переключения между доступными профилями достаточно кликнуть правой кнопкой мыши по окошку терминала, в контекстном меню навести курсор на пункт Профили и выбрать нужный.

MMoZHl2axOoAAAAASUVORK5CYII=

Выводы

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

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

Об авторе

On certain XTerm/ANSI-compatible terminals (like xterm and gnome-terminal), you can set colors using a palette bigger then the default 8/16-colors palette (for example using an 88-colors, 256-colors or 16777216-colors (RGB) palette; both xterm and gnome-terminal support both the 256-colors and the 16777216-colors (RGB) palette); mind that the shell might override this (this is the case e.g. for zsh).

Here’s a script to list the colors in the 256-color palette along with their ANSI color code in XTerm/ANSI-compatible terminals with a 256-color palette support:

#!/bin/bash
for((i=16; i<256; i++)); do
    printf "e[48;5;${i}m%03d" $i;
    printf 'e[0m';
    [ ! $((($i - 15) % 6)) -eq 0 ] && printf ' ' || printf 'n'
done

screenshot1

screenshot

Depending on whether you want to apply the color to the foreground or to the background, use an <fg_bg> value of 38 or 48 (respectively) in the following command:

printf 'e[<fg_bg>;5;<ANSI_color_code>m'

For example, to set the foreground color (<fg_bg>=38) to red (<ANSI_color_code>=196) and the background color (<fg_bg>=48) to black (<ANSI_color_code>=0):

printf 'e[38;5;196m Foreground color: redn'
printf 'e[48;5;0m Background color: blackn'

screenshot3

It’s necessary to redraw the prompt using printf 'e[K' in order for the background color to apply to the whole line and in order for the foreground color to apply to the cursor:

screenshot4

The same thing can be accomplished using RGB values instead of ANSI color codes in a compatible terminal; depending on whether you want to apply the color to the foreground or to the background, use an <fg_bg> value of 38 or 48 (respectively) in the following command:

printf 'e[<fg_bg>;2;<R>;<G>;<B>m'

For example, to set the foreground color (<fg_bg>=38) to red (<R>=255, <G>=0, <B>=0) and the background color (<fg_bg>=48) to black (<R>=0, <G>=0, <B>=0):

printf 'e[38;2;255;0;0m Foreground color: redn'
printf 'e[48;2;0;0;0m Background color: blackn'

screenshot5

Again, it’s necessary to redraw the prompt using printf 'e[K' in order for the background color to apply to the whole line and in order for the foreground color to apply to the cursor:

screenshot6

Using either methods, you can use printf 'e[0m' to reset all the attributes:

screenshot7

Состояние перевода: На этой странице представлен перевод статьи Color output in console. Дата последней синхронизации: 17 сентября 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Эта страница описывает настройку вывода цветного текста в различных консольных программах.

Как это работает

Управляющие последовательности

С помощью управляющих последовательностей ANSI (ANSI escape sequences) можно передать дополнительную информацию в вывод терминала, в том числе цвет. С годами диапазон цветов терминала значительно расширился: от изначальных восьми цветов до полного 24-битного True Color.

Базовое кодирование цвета даёт 8 цветов обычной яркости и 8 ярких вариантов этих цветов. Современные эмуляторы терминала, в том числе сама Linux-консоль, дают возможность указать конкретные RGB-значения, которые будут использоваться для отображения этих цветом. Этот режим поддерживается почти всеми эмуляторами терминала.

С появлением 256-цветных дисплеев появились последовательности для 256 цветов. Это 16 основных цветов, 216 цветов RGB (размещенных в кубе 6x6x6) и 24 оттенка серого. За исключением первых 16 цветов, схема обычно не настраивается, поскольку она имеет чёткое сопоставление с RGB. Этот режим поддерживается большинством эмуляторов терминала. (Меньшая часть эмуляторов использует аналогичную, но несовместимую кодировку только с 88 цветами. Вы вряд ли будете использовать их на практике, но они появятся в базе данных terminfo.)

Не так широко поддерживается True Color режим, дающий 16.7 миллионов (224) цветов RGB (значение каждого канала в диапазоне от 0 до 255).

Termcap и terminfo

Termcap и terminfo, являющиеся частью ncurses, — это базы данных, дающие информацию о том, какие последовательности поддерживаются терминалом (который обычно прописан в переменной окружения TERM). Можно использовать команды tput(1) и infocmp(1) для чтения этих данных в командной строке.

Приложения

diff

С версии 3.4 у diffutils есть опция --color (GNU mailing list).

$ alias diff='diff --color=auto'

grep

Опция --color=auto включает выделение цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.

Цветной вывод в grep также удобен при работе с regexp.

Можно использовать alias, чтобы прописать постоянное использование этой опции:

alias grep='grep --color=auto'

Переменная GREP_COLORS позволяет определить цвета и настроить разные части выделения. Чтобы изменить цвета, найдите нужные управляющие последовательности ANSI и используйте их. Подробнее смотрите grep(1).

Опция -n включает вывод номеров строк файла.

ip

Команда ip(8) из пакета iproute2 имеет опцию -c для включения цвета. Значение auto этого параметра включит вывод цвета только в терминале.

alias ip='ip -color=auto'

less

Переменные окружения

Можно попросить less использовать цвета для обозначения жирного текста и других эффектов форматирования.

Добавьте эту строку в настройках вашей командной оболочки:

export LESS='-R --use-color -Dd+r$Du+b'

Она задаст красный цвет для жирного и синий для подчёркивания.

Подробнее об опции --use-color можно почитать в less(1) или [1].

Чтение из stdin

Примечание: Рекомендуется включить цветной вывод через переменные окружения в вашем ~/.bashrc или ~/.zshrc; примеры ниже основаны на export LESS=R

Когда вы выполняете команду и направляете её стандартный вывод (stdout) в less для постраничного просмотра (например, pacman -Qe | less), вы можете заметить, что цвет пропадает. Обычно это из-за того, что программа пытается определить, является ли stdout интерактивным терминалом, и если да, то печатает цветой текст, а если нет, то не цветной. Это правильное поведение, когда вы хотите перенаправить stdout в файл, например pacman -Qe > pkglst-backup.txt, но не очень хорошо не в случае с less.

Некоторые программы имеют опцию для отключения определения интерактивного tty:

# dmesg --color=always | less

Если у программы нет подобной опции, можно заставить программу считать stdout интерактивным терминалом с помощью следующих утилит:

  • ColorThis — запускает программу в (группе) pty, поддерживает перенаправление stdin.
https://github.com/Sasasu/ColorThis || colorthis-gitAUR
  • stdoutisatty — перехватывает обращение к функции isatty.
https://github.com/lilydjwg/stdoutisatty. || stdoutisatty-gitAUR
Пример: stdoutisatty программа | less
  • unbuffer — tclsh-скрипт, который поставляется с expect, запускает программу в pty.
http://expect.sourceforge.net/example/unbuffer.man.html || expect
Пример: unbuffer программа | less

В качестве альтернативы можно использовать модуль zpty из zsh: [2]

~/.zshrc
zmodload zsh/zpty

pty() {
	zpty pty-${UID} ${1+$@}
	if [[ ! -t 1 ]];then
		setopt local_traps
		trap '' INT
	fi
	zpty -r pty-${UID}
	zpty -d pty-${UID}
}

ptyless() {
	pty $@ | less
}

Использование:

$ ptyless программа

Для перенаправления в какой-нибудь другой просмотрщик (в данном примере less):

$ pty программа | less

ls

Опция --color=auto включает подсвечивание цветом. Цвет будет использоваться только при выводе в терминал; не в pipe или перенаправление.

alias ls='ls --color=auto'

Переменная LS_COLORS позволяет определить цвета и настроить разные части выделения. Используйте dircolors(1) для установки.

Примечание: Использование --color может привести к заметному замедлению ls при запуске в каталоге с очень большим числом записей. Стандартные настройки заставляют ls делать stat(1) для каждого файла. Однако, если вы хотите раскраску типа файла, но можете прожить без других опций (например, executable, orphan, sticky, other-writable, capability), можно использовать dircolors для установки переменной окружения LS_COLORS примерно так:

eval $(dircolors -p | perl -pe 's/^((CAP|S[ET]|O[TR]|M|E)w+).*/$1 00/' | dircolors -)

Подробнее смотрите ls(1).

man

There is a real color facility in grotty(1), but it is strongly discouraged for man pages. Here we fake a colored man by hacking two main pagers, less and most: we replace the sequences for bold, standout, and underline with spiced ones that contain color.

Текст man-страниц может отображаться в разных цветах, что упрощает их чтение. Есть два основных метода, позволяющих раскрасить страницы — с помощью утилит less и most.

С помощью less (рекомендуется)

Преимущество этого способа в том, что less имеет более богатый набор возможностей, чем most, а также используется по умолчанию для отображения man-страниц.

Смотрите #less для более детального описания.

export MANPAGER="less -R --use-color -Dd+r -Du+b"

Для Fish настройки будут выглядеть как-то так:

~/.config/fish/config.fish
set -xU MANPAGER 'less -R --use-color -Dd+r -Du+b'

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

С помощью most (не рекомендуется)

Утилита most выполняет ту же задачу, что less и more, но имеет меньший набор возможностей. Настройка цветов для most проще, однако требуется дополнительная настройка для того, чтобы most работал наподобие less.

Установите пакет most.

В файле /etc/man_db.conf раскомментируйте параметр pager и установите ему значение most -s:

DEFINE     pager     most -s

Откройте любую man-страницу для проверки.

Настройка цветов осуществляется в пользовательском файле ~/.mostrc (нужно создать, если он отсутствует), либо в системном файле /etc/most.conf. Пример конфигурации:

% Color settings
color normal lightgray black
color status yellow blue
color underline yellow black
color overstrike brightblue black

Полный список сочетаний клавиш можно посмотреть в /usr/share/doc/most/most-fun.txt. Чтобы получить базовую less/vim-подобную конфигурацию, можно скопировать /usr/share/doc/most/lesskeys.rc в ~/.mostrc. Этот файл не включает в себя ‘g’ или ‘G’, так что нужно добавить следующие строки в ~/.mostrc:

setkey bob "g"
setkey eob "G"
setkey page_down "d"
setkey page_up "u"

Также можно задать сочетание клавиш для goto_line, если вам не нравится стандартное ‘J’.

Другой пример, показывающий, как настроить сочетания клавиш, подобно less (переход к строке назначен на клавишу J):

% less-like keybindings
unsetkey "^K"
unsetkey "g"
unsetkey "G"
unsetkey ":"

setkey next_file ":n"
setkey find_file ":e"
setkey next_file ":p"
setkey toggle_options ":o"
setkey toggle_case ":c"
setkey delete_file ":d"
setkey exit ":q"

setkey bob "g"
setkey eob "G"
setkey down "e"
setkey down "E"
setkey down "j"
setkey down "^N"
setkey up "y"
setkey up "^Y"
setkey up "k"
setkey up "^P"
setkey up "^K"
setkey page_down "f"
setkey page_down "^F"
setkey page_up "b"
setkey page_up "^B"
setkey other_window "z"
setkey other_window "w"
setkey search_backward "?"
setkey bob "p"
setkey goto_mark "'"
setkey find_file "E"
setkey edit "v"

Цветные страницы в xterm или rxvt-unicode

Быстрый способ раскрасить цвета man-страниц, которые просматриваются через xterm / uxterm или rxvt-unicode, заключается в редактировании файла ~/.Xresources.

В подразделах представлена конфигурация для xterm и rxvt-unicode.

xterm
*VT100.colorBDMode:     true
*VT100.colorBD:         red
*VT100.colorULMode:     true
*VT100.colorUL:         cyan

Эти настройки заменяют начертания текста цветами. Добавьте также:

*VT100.veryBoldColors: 6

если вы хотите видеть цвета и начертания одновременно. Смотрите также xterm(1) для описания ресурса терминала veryBoldColors.

rxvt-unicode

Конфигурация:

URxvt.colorIT:      #87af5f
URxvt.colorBD:      #d7d7d7
URxvt.colorUL:      #87afd7

После внесения изменений в файл, выполните:

$ xrdb -load ~/.Xresources

Запустите xterm/uxterm или rxvt-unicode и вы должны увидеть цветные man-страницы. Эти настройки добавляют цвета для слов, написанных полужирным и подчеркнутым шрифтом в xterm/uxterm, и цвета для слов в полужирном, подчеркнутом, и наклонном начертаниях в rxvt-unicode. Вы можете также совмещать эти атрибуты в различные комбинации. Смотрите sources.

pacman

Pacman также имеет опцию для вывода цвета. Раскомментируйте строку Color в файле /etc/pacman.conf.

Обёртки

Универсальные обёртки

(многие давно не обновлялись, но всё ещё работают)

Они поставляются с предварительно настроенными пресетами. Пресеты можно менять, можно создавать новые.

Важно: Обёртки добавляют управляющие последовательности в вывод оборачиваемых команд. Некоторые скрипты и програмы, использующие вывод стандартных утилит, могут сломаться от этого.

  • rainbow — раскрашивает вывод команд или STDIN по паттернам.
    Пресеты: df, diff, env, host, ifconfig, java-stack-trace, jboss, jonas, md5sum, mvn2, mvn3, ping, tomcat, top, traceroute.
https://github.com/nicoulaj/rainbow || rainbowAUR
  • grc — ещё один раскрашиватель для украшения ваших лог-файлов или вывода команд.
    Пресеты: cat, cvs, df, digg, gcc, g++, ls, ifconfig, make, mount, mtr, netstat, ping, ps, tail, traceroute, wdiff, blkid, du, dnf, docker, docker-machine, env, id, ip, iostat, last, lsattr, lsblk, lspci, lsmod, lsof, getfacl, getsebool, ulimit, uptime, nmap, fdisk, findmnt, free, semanage, sar, ss, sysctl, systemctl, stat, showmount, tune2fs and tcpdump.
https://github.com/garabik/grc || grc
  • cope — раскрашивающая обёртка для консольных программ.
    Пресеты: acpi, arp, cc, df, dprofpp, fdisk, free, g++, gcc, id, ifconfig, ls, lspci, lsusb, make, md5sum, mpc, netstat, nm, nmap, nocope, ping, pmap, ps, readelf, route, screen, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shasum, socklist, stat, strace, tcpdump, tracepath, traceroute, w, wget, who, xrandr.
https://github.com/yogan/cope || cope-gitAUR
  • cw — ненавязчивая обёртка для популярных unix-команд. Оборачивает file, что может вызывать проблемы.
    Пресеты: arp, arping, auth.log@, blockdev, cal, cksum, clock, configure, cpuinfo@, crontab@, cw-pipe, cw-test.cgi, date, df, diff, dig, dmesg, du, env, figlet, file, find, finger, free, fstab@, fuser, g++, gcc, group@, groups, hdparm, hexdump, host, hosts@, id, ifconfig, inittab@, iptables, last, lastlog, lsattr, lsmod, lsof, ltrace-color, make, md5sum, meminfo@, messages@, mount, mpg123, netstat, nfsstat, nmap, nslookup, objdump, passwd@, ping, pmap, pmap_dump, praliases, profile@, protocols@, ps, pstree, quota, quotastats, resolv.conf@, route, routel, sdiff, services@, showmount, smbstatus, stat, strace-color, sysctl, syslog, tar, tcpdump, tracepath, traceroute, umount, uname, uptime, users, vmstat, w, wc, whereis, who, xferlog.
http://cwrapper.sourceforge.net/ || cwAUR
  • ccze — быстрая раскраска журнала, написан на C, предназначен для замены colorize
https://github.com/cornet/ccze/ || ccze

Библиотеки для раскраски вывода

  • libtextstyle — библиотека на C для стилизации текстового вывода в терминалах
https://www.gnu.org/software/gettext/libtextstyle/manual/index.html || gettext
  • ruby-rainbow — расширение для Ruby-класса String, добавляющее поддержку ANSI-цветов
https://rubygems.org/gems/rainbow/ || ruby-rainbow
  • python-blessings — тонкая обёртка для раскраски, стилизации и позиционирования
https://github.com/erikrose/blessings || python-blessings
  • lolcat — программа на Ruby, которая делает текст цветным как радуга
https://github.com/busyloop/lolcat/ || lolcat

Для отдельных приложений

Компиляторы

  • colorgcc — обёртка на Perl, раскрашивающая предупреждения и ошибки, соответствующие формату вывода gcc
https://schlueters.de/colorgcc.html || colorgcc

diff

Diff имеет встроенную поддержку цветов, что разумно использовать. Но эти обёртки тоже можно использовать:

  • colordiff — Perl-скрипт для подсветки diff.
https://www.colordiff.org/ || colordiff
  • cwdiff — обёртка над (w)diff с поддержкой каталогов.
https://github.com/junghans/cwdiff || cwdiffAUR
  • git-delta — постраничный просмотрщик с подсветкой синтаксиса для git и diff.
https://github.com/dandavison/delta || git-delta

cat

  • bat — клон cat с подсветкой синтаксиса и интеграцией с git.
https://github.com/sharkdp/bat || bat

less

source-highlight

В less можно добавить подсветку синтаксиса. Установите пакет source-highlight и добавьте в настройки вашей командной оболочки:

~/.bashrc
export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
export LESS='-R '
lesspipe

Активным пользователям командной строки может быть интересен lesspipe.

С помощью него можно просматривать список файлов в архиве:

$ less архив.tar.gz
==> use tar_file:contained_file to view a file in the archive
-rw------- пользователь/группа  695 2008-01-04 19:24 архив/содержимое1
-rw------- пользователь/группа   43 2007-11-07 11:17 архив/содержимое2
архив.tar.gz (END)

lesspipe также добавляет к less возможность взаимодействия с файлами отличными от архивов, предоставляя альтернативу для конкретной команды, ассоциированной с этим типом файлов (вроде просмотра HTML через python-html2text).

Перелогиньтесь после установки lesspipe для его активации, или выполните source /etc/profile.d/lesspipe.sh.

Make

  • colormake — простая обёртка над make, делающая его вывод более читабельным.
https://github.com/pagekite/Colormake/ || colormakeAUR

Ping

  • prettyping — добавляет некоторые крутые возможности для мониторинга пинга. Обёртка над стандартным ping, делающая вывод более красивым, цветным, компактным и лёгким для чтения.
https://denilson.sa.nom.br/prettyping/ || prettyping

Командные оболочки

bash

Смотрите Bash (Русский)/Prompt customization (Русский)#Цвета.

Fish

Смотрите Fish (Русский)#Веб-интерфейс.

xonsh

Смотрите Customizing the Prompt.

zsh

Смотрите Zsh (Русский)#Цвета.

Эмуляторы терминала

Виртуальная консоль

Если виртуальная консоль Linux работает через фреймбуффер, её цвета можно изменить. Это делается путём записи управляющей последовательности \e]PXRRGGBB, где X это 16-ричный индекс цвета 0-F и RRGGBB это стандартный 16-ричный код RGB.

Например, для переиспользования существующих цветов из ~/.Xresources добавьте в настройках своей командной оболочки:

if [ "$TERM" = "linux" ]; then
    _SEDCMD='s/.**color([0-9]{1,}).*#([0-9a-fA-F]{6}).*/1 2/p'
    for i in $(sed -n "$_SEDCMD" $HOME/.Xresources | awk '$1 < 16 {printf "\e]P%X%s", $1, $2}'); do
        echo -en "$i"
    done
    clear
fi

Окно входа

Это пример цветного экрана входа в /etc/issue. Сделайте резервную копию исходного файла mv /etc/issue /etc/issue.bak как root и создайте новый /etc/issue:

e[He[2J
                                                             e[1;30m| e[34mr s
      e[36;1m/\\                        e[37m||      e[36m| =                 e[30m|
     e[36m/  \\                       e[37m||      e[36m|                   e[30m| e[32mt
    e[1;36m/ e[0;36m.. e[1m\\   e[37m//==\\\ ||/= /==\\ ||/=\\  e[36m| | |/\\ |  | \\ /  e[30m| e[32md
   e[0;36m/ .  . \\ e[37m||    || ||  ||     ||  ||  e[36m| | |  | |  |   X   e[1;30m|
  e[0;36m/  .  .  \\ e[37m\\\==/| ||   \\==/ ||  ||  e[36m| | |  |  \/|  / \\ e[1;30m| e[31mU
 e[0;36m/ ..    .. \\   e[0;37mA simple, lightweight linux distribution.   e[1;30m|
e[0;36m/_'        `_\\                                              e[1;30m| e[35ml e[0mon e[1;33mn
e[0m 

Смотрите также:

  • https://bbs.archlinux.org/viewtopic.php?pid=386429#p386429
  • https://www.linuxfromscratch.org/blfs/view/svn/postlfs/logon.html

X

Многие Xorg-терминалы, в том числе xterm and urxvt, поддерживают как минимум 16 цветов. Они могут быть изменены через X resources или через настройки, специфичные для терминала. Например:

~/.Xresources
! Black + DarkGrey
*color0:  #000000
*color8:  #555753
! DarkRed + Red
*color1:  #ff6565
*color9:  #ff8d8d
! DarkGreen + Green
*color2:  #93d44f
*color10: #c8e7a8
! DarkYellow + Yellow
*color3:  #eab93d
*color11: #ffc123
! DarkBlue + Blue
*color4:  #204a87
*color12: #3465a4
! DarkMagenta + Magenta
*color5:  #ce5c00
*color13: #f57900
!DarkCyan + Cyan (both not tango)
*color6:  #89b6e2
*color14: #46a4ff
! LightGrey + White
*color7:  #cccccc
*color15: #ffffff

Важно: Ресурсы цветов, такие как foreground и background, могут быть прочитаны другими приложениями (такими как emacs). Это можно обойти, указав имя класса, например XTerm.foreground.

Смотрите также:

  • #Цветные страницы в xterm или rxvt-unicode о том, как автоматически раскрашивать жирный и подчёркнутый текст.
  • Color Themes — обширный список цветовых тем терминала от Phraktured.
  • Xcolors by dkeg (смотрите файлы theme/dkeg - тема в репозитории)
  • base16 color schemes

Отображение 256-цветной палитры

Печатает 256 цветов на экран.

$ (x=`tput op` y=`printf %76s`;for i in {0..256};do o=00$i;echo -e ${o:${#o}-3:3} `tput setaf $i;tput setab $i`${y// /=}$x;done)

Отображение управляющих последовательностей tput

Замените tput op на желаемую команду.

$ ( strace -s5000 -e write tput op 2>&2 2>&1 ) | tee -a /dev/stderr | grep -o '"[^"]*"'
033[33[1;34m"33[39;49m"33[00m

Просмотр числа поддерживаемых цветов

Эта команда выведет вам список всех терминалов, известных базе terminfo, и число поддерживаемых ими цветов. Возможные значения: 8, 15, 16, 52, 64, 88 и 256.

$ for T in `find /usr/share/terminfo -type f -printf '%f '`;do echo "$T `tput -T $T colors`";done|sort -nk2
Eterm-88color 88
rxvt-88color 88
xterm+88color 88
xterm-88color 88
Eterm-256color 256
gnome-256color 256
konsole-256color 256
putty-256color 256
rxvt-256color 256
screen-256color 256
screen-256color-bce 256
screen-256color-bce-s 256
screen-256color-s 256
xterm+256color 256
xterm-256color 256

Просмотр возможностей терминала

Эта команда покажет возможности вашего текущего терминала.

$ infocmp -1 | tr -d 't,' | cut -f1 -d'=' | grep -v "$TERM" | sort | column -c80
acsc		ed		kcuu1		kich1		rmso
am		el		kDC		kLFT		rmul
bce		el1		kdch1		km		rs1
bel		enacs		kel		kmous		rs2
blink		eo		kend		knp		s0ds
bold		flash		kEND		kNXT		s1ds
btns#5		fsl		kent		kpp		s2ds
bw		home		kf1		kPRV		s3ds
ccc		hpa		kf10		kRIT		sc
civis		hs		kf11		kslt		setab
clear		ht		kf12		lines#24	setaf
cnorm		hts		kf13		lm#0		setb
colors#0x100	ich		kf14		mc0		setf
cols#80		ich1		kf15		mc4		sgr
cr		il		kf16		mc5		sgr0
csr		il1		kf17		mc5i		sitm
cub		ind		kf18		mir		smacs
cub1		indn		kf19		msgr		smam
cud		initc		kf2		ncv#0		smcup
cud1		is1		kf20		npc		smir
cuf		is2		kf3		op		smkx
cuf1		it#8		kf4		pairs#0x7fff	smso
cup		ka1		kf5		rc		smul
cuu		ka3		kf6		rev		tbc
cuu1		kb2		kf7		ri		tsl
cvvis		kbs		kf8		rin		u6
dch		kc1		kf9		ritm		u7
dch1		kc3		kfnd		rmacs		u8
dl		kcbt		kFND		rmam		u9
dl1		kcub1		kHOM		rmcup		vpa
dsl		kcud1		khome		rmir		xenl
ech		kcuf1		kIC		rmkx		xon

Скрипты, выводящие схему цветов

На странице [3] есть скрипты, которые отобразят вашу текущую схему цветов.

Поддержка True Color

Некоторые терминалы поддерживают все 16 миллионов цветов (RGB, 8 бит на канал): xterm, console, st и т.д. Соответствующие значения TERM xterm-direct, konsole-direct, st-direct и.т.д понимает ncurses с версии 6.1 [4]. Подробнее об эмуляторах терминала и приложениях, поддерживающих True Color, смотрите [5].

Имейте в виду, что ядро Linux поддерживает управляющие последовательности SGR для True Color, но использовать это бессмысленно, потому что драйвер отобразит 24-битные цвета на 256-цветную палитру (смотрите функции rgb_foreground, rgb_background). Поэтому в terminfo нет записи linux-direct.

Смотрите также

  • клон lolcat на x64 ассемблере

You can add color to your Linux terminal using special ANSI encoding settings, either dynamically in a terminal command or in configuration files, or you can use ready-made themes in your terminal emulator. Either way, the nostalgic green or amber text on a black screen is wholly optional. This article demonstrates how you can make Linux as colorful (or as monochromatic) as you want.

Terminal capabilities

Modern systems usually default to at least xterm-256color, but if you try to add color to your terminal without success, you should check your TERM setting.

Historically, Unix terminals were literally that: physical points at the literal endpoint (termination) of a shared computer system where users could type in commands. They were unique from the teletype machines (which is why we still have /dev/tty devices in Linux today) that were often used to issue commands remotely. Terminals had CRT monitors built-in, so users could sit at a terminal in their office to interact directly with the mainframe. CRT monitors were expensive—both to manufacture and to control; it was easier to have a computer spit out crude ASCII text than to worry about anti-aliasing and other niceties that modern computerists take for granted. However, developments in technology happened fast even then, and it quickly became apparent that as new video display terminals were designed, they needed new capabilities to be available on an optional basis.

For instance, the fancy new VT100 released in 1978 supported ANSI color, so if a user identified the terminal type as vt100, then a computer could deliver color output, while a basic serial device might not have such an option. The same principle applies today, and it’s set by the TERM environment variable. You can check your TERM definition with echo:

$ echo $TERM
xterm-256color

The obsolete (but still maintained on some systems in the interest of backward compatibility) /etc/termcap file defined the capabilities of terminals and printers. The modern version of that is terminfo, located in either /etc or /usr/share, depending on your distribution. These files list features available in different kinds of terminals, many of which are defined by historical hardware: there are definitions for vt100 through vt220, as well as for modern software emulators like xterm and Xfce. Most software doesn’t care what terminal type you’re using; in rare instances, you might get a warning or error about an incorrect terminal type when logging into a server that checks for compatible features. If your terminal is set to a profile with very few features, but you know the emulator you use is capable of more, then you can change your setting by defining the TERM environment variable. You can do this by exporting the TERM variable in your ~/.bashrc configuration file:

export TERM=xterm-256color

Save the file, and reload your settings:

$ source ~/.bashrc

ANSI color codes

Modern terminals have inherited ANSI escape sequences for «meta» features. These are special sequences of characters that a terminal interprets as actions instead of characters. For instance, this sequence clears the screen up to the next prompt:

$ printf `33[2J`

It doesn’t clear your history; it just clears up the screen in your terminal emulator, so it’s a safe and demonstrative ANSI escape sequence.

ANSI also has sequences to set the color of your terminal. For example, typing this code changes the subsequent text to green:

$ printf '33[32m'

As long as you see color the same way your computer does, you could use color to help you remember what system you’re logged into. For example, if you regularly SSH into your server, you can set your server prompt to green to help you differentiate it at a glance from your local prompt. For a green prompt, use the ANSI code for green before your prompt character and end it with the code representing your normal default color:

export PS1=`printf "33[32m$ 33[39m"`

Foreground and background

You’re not limited to setting the color of your text. With ANSI codes, you can control the background color of your text as well as do some rudimentary styling.

For instance, with 33[4m, you can cause text to be underlined, or with 33[5m you can set it to blink. That might seem silly at first—because you’re probably not going to set your terminal to underline all text and blink all day—but it can be useful for select functions. For instance, you might set an urgent error produced by a shell script to blink (as an alert for your user), or you might underline a URL.

For your reference, here are the foreground and background color codes. Foreground colors are in the 30 range, while background colors are in the 40 range:

Color Foreground Background
Black 33[30m 33[40m
Red 33[31m 33[41m
Green 33[32m 33[42m
Orange 33[33m 33[43m
Blue 33[34m 33[44m
Magenta 33[35m 33[45m
Cyan 33[36m 33[46m
Light gray 33[37m 33[47m
Fallback to distro’s default 33[39m 33[49m

There are some additional colors available for the background:

Color Background
Dark gray 33[100m
Light red 33[101m
Light green 33[102m
Yellow 33[103m
Light blue 33[104m
Light purple 33[105m
Teal 33[106m
White 33[107m

Permanency

Setting colors in your terminal session is only temporary and relatively unconditional. Sometimes the effect lasts for a few lines; that’s because this method of setting colors relies on a printf statement to set a mode that lasts only until something else overrides it.

The way a terminal emulator typically gets instructions on what colors to use is from the settings of the LS_COLORS environment variable, which is in turn populated by the settings of dircolors. You can view your current settings with an echo statement:

$ echo $LS_COLORS
rs=0:di=38;5;33:ln=38;5;51:mh=00:pi=40;
38;5;11:so=38;5;13:do=38;5;5:bd=48;5;
232;38;5;11:cd=48;5;232;38;5;3:or=48;
5;232;38;5;9:mi=01;05;37;41:su=48;5;
196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;
196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;
[...]

Or you can use dircolors directly:

$ dircolors --print-database
[...]
# image formats
.jpg 01;35
.jpeg 01;35
.mjpg 01;35
.mjpeg 01;35
.gif 01;35
.bmp 01;35
.pbm 01;35
.tif 01;35
.tiff 01;35
[...]

If that looks cryptic, it’s because it is. The first digit after a file type is the attribute code, and it has six options:

  • 00 none
  • 01 bold
  • 04 underscore
  • 05 blink
  • 07 reverse
  • 08 concealed

The next digit is the color code in a simplified form. You can get the color code by taking the final digit of the ANSII code (32 for green foreground, 42 for green background; 31 or 41 for red, and so on).

Your distribution probably sets LS_COLORS globally, so all users on your system inherit the same colors. If you want a customized set of colors, you can use dircolors for that. First, generate a local copy of your color settings:

$ dircolors --print-database > ~/.dircolors

Edit your local list as desired. When you’re happy with your choices, save the file. Your color settings are just a database and can’t be used directly by ls, but you can use dircolors to get shellcode you can use to set LS_COLORS:

$ dircolors --bourne-shell ~/.dircolors 
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:
pi=40;33:so=01;35:do=01;35:bd=40;33;01:
cd=40;33;01:or=40;31;01:mi=00:su=37;41:
sg=30;43:ca=30;41:tw=30;42:ow=34;
[...]
export LS_COLORS

Copy and paste that output into your ~/.bashrc file and reload. Alternatively, you can dump that output straight into your .bashrc file and reload.

$ dircolors --bourne-shell ~/.dircolors >> ~/.bashrc
$ source ~/.bashrc

You can also make Bash resolve .dircolors upon launch instead of doing the conversion manually. Realistically, you’re probably not going to change colors often, so this may be overly aggressive, but it’s an option if you plan on changing your color scheme a lot. In your .bashrc file, add this rule:

[[ -e $HOME/.dircolors ]] && eval "`dircolors --sh $HOME/.dircolors`"

Should you have a .dircolors file in your home directory, Bash evaluates it upon launch and sets LS_COLORS accordingly.

Color

Colors in your terminal are an easy way to give yourself a quick visual reference for specific information. However, you might not want to lean on them too heavily. After all, colors aren’t universal, so if someone else uses your system, they may not see the colors the same way you do. Furthermore, if you use a variety of tools to interact with computers, you might also find that some terminals or remote connections don’t provide the colors you expect (or colors at all).

Those warnings aside, colors can be useful and fun in some workflows, so create a .dircolor database and customize it to your heart’s content.

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.

i have created some functions, based on github code from other threads. Sorry i don’t remember.

You can put these functions in your ~/.bashrc file

As you can see, if you call «create_random_profile»,

First, it will check and delte any previous random profile you have created.

Second, it will create a random name profile in gnome terminals.

Third, it will set that name in an environment variable that you can use to change your color in predefined functions. See last function function setcolord().

This should be useful, to have many terminals with different colors. Besides, with predefined functions you can change these colors on the fly.
Enjoy it!

  function create_random_profile() {
          #delete previous profiles in case there were something
          #delete_one_random_profile
          prof="`mktemp -u HACK_PROFILE_XXXXXXXXXX`"
    gconftool-2 --type list --list-type string --set $prof_list "`gconftool-2 --get $prof_list | sed "s/]/,$prof]/"`"
    file="`mktemp`"
    gconftool-2 --dump "/apps/gnome-terminal/profiles/Default" | sed "s,profiles/$2,profiles/$prof,g" > "$file"
    gconftool-2 --load "$file"
    gconftool-2 --type string --set "/apps/gnome-terminal/profiles/$prof/visible_name" "$prof"
    gconftool-2 --set "/apps/gnome-terminal/profiles/$prof/use_theme_colors" --type bool false
    rm -f -- "$file"
          export __TERM_PROF=$prof
  }

  function delete_one_random_profile() {
          regular="HACK_PROFILE_"
          prof=$(gconftool-2 --get /apps/gnome-terminal/global/profile_list | sed -n "s/.*(HACK_PROFILE_..........).*/1/p")     
          if [ ! -z "$prof"]; then
          echo "size ${#prof}"
          echo "size of regular ${#regular}"
               echo "DO DELETE of $prof"
          #if not empty
        gconftool-2 --type list --list-type string --set $prof_list "`gconftool-2 --get $prof_list | sed "s/$prof//;s/[,/[/;s/,,/,/;s/,]/]/"`"
        gconftool-2 --unset "/apps/gnome-terminal/profiles/$prof"
          else
               echo "NOTHING TO DELETE"
          fi
  }

  function setcolord()   
  {
  echo "Dont forget to change to Profile0 in the menu of your terminal->Change Profile->Profile_0"
  gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/background_color" --type string white
  gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/foreground_color" --type string black
  }
  function setcolor_cyan()   
  {
  echo "Dont forget to change to $__TERM_PROF in the menu of your terminal->Change Profile->Profile_0"
  gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/background_color" --type string "#8DCBCC"
  gconftool-2 --set "/apps/gnome-terminal/profiles/$__TERM_PROF/foreground_color" --type string black
  }

By the way you can save time if you create the terminal using already the random. You can do that calling:

gnome-terminal --working-directory=$HOME --window-with-profile="$prof" 

Если вы освоили Linux и настраиваете под себя, то вам приходится использовать терминал и интерпретатор bash.

Захотелось мне изменить внешний вид терминала, а в частности вид самой командной строки. Оказалось это все не так сложно.

Информации на эту тему очень много.

Итак по порядку, начнем с самого терминала.

Запустим его, выглядит по умолчанию он вот так:

терминал, внешний вид по умолчанию

Запустим терминал и зайдем в меню сверху правка — настройки

терминал, открываем настройки

В настройках терминала вы найдете вкладки Общие, Вид, Цвета — это те вкладки с параметрами которые содержат опции, влияющие на внешний вид вашего терминала.

Все пункты имеют вполне понятное название и будет не трудно разобраться в них даже новичку.

Вкладка настроек вида. Можно поменять шрифт его параметры. Фон сделать прозрачным — например. Задать размеры терминала которым он соотвутствует при запуске.

настройки терминала вкладка Вид

Вкладка цвета.

Думаю понятно из названия, тут вы сможете поменять цветовую схему терминала.

Настройка терминала, вкладка цвета

Теперь перейдем к интерпретатору Bash

Интерпретатор bash — простым языком это оболочка которая принимает ваши команды и передает их системе.

Из википедии:

Bash (от англ. Bourne again shell, каламбур «Born again» shell — «возрождённый» shell) — усовершенствованная и модернизированная вариация командной оболочки Bourne shell. Одна из наиболее популярных современных разновидностей командной оболочки UNIX. Особенно популярна в среде Linux, где она часто используется в качестве предустановленной командной оболочки.

Представляет собой командный процессор, работающий, как правило, в интерактивном режиме в текстовом окне. Bash также может читать команды из файла, который называется скриптом (или сценарием). Как и все Unix-оболочки, он поддерживает автодополнение имён файлов и каталогов, подстановку вывода результата команд, переменные, контроль над порядком выполнения, операторы ветвления и цикла. Ключевые слова, синтаксис и другие основные особенности языка были заимствованы из sh. Другие функции, например, история, были скопированы из csh и ksh. Bash в основном соответствует стандарту POSIX, но с рядом расширений[3].

В windows тоже есть терминал, который использует интерпретатор shell — более раннюю версию Bash.

По умолчанию выглядит наша строка так

строка терминала со стилями по умолчанию

Вот ее и будем стилизовать — поменяем цвета и вывод информации.

Стиль нашей командной строки определяет конфигурационный файл

~/.bashrc.

Он содержится в нашей домашней директории в скрытом виде, его и будем редактировать.

Но для начала нужно знать, что редактировать.

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

Стиль и первоначальную информацию выводит и определяет переменная PS1.

При запуске мы видим имя пользователя и после знака @ идет имя нашего хоста, на конце знак доллара.

Если вы перейдете на работу от имени root (получите полный доступ) на конце строки будет стоять знак #.

И соответственно сменится имя на root.

Параметры переменной PS1 в конфигурационном файле Bash

a an ASCII bell character (07)
d дата в формате »День_недели, Месяц, Число».
e an ASCII escape character (033)
h имя хоста до первой точки.
H имя хоста
j количество задач, работающих в интерпретаторе в настоящее время
l название терминала
n переход на новую строку
r возврат каретки на начало строки
s название интерпретатора (будет выведено, например, «bash»
t время в 24-часовом формате (ЧЧ: MM: СС)
T время в 12-часовом формате (ЧЧ: ММ: СС)
@ время в 12-часовом формате (AM/PM)
u имя активного пользователя
v номер версии bash
V номер версии bash, номер релиза
w текущая директория (будет выведено в формате /path/to/work_dir_name)
W имя текущей директории (будет выведено в формате «dir_name»)
! номер команды в истории
# системный номер команды
$ if the effective UID is 0, a #, otherwise a $
\ обратный слеш
[ начало последовательности непечатаемых символов (см. примеры в разделе «Цвета и стилизация».
] конец последовательности символов
$ ( ) внешняя команда

С помощью этих переменных можно в приветствии вывести время например и т.п.

Если зададим такую переменную, добавим дату к имеющемуся (как пример), убрав все стили

PS1='[u@h] $(date +%m/%d/%y) w $'

Получим такой результат:

строка bash с текущей датой

Чтоб задать стили необходимо знать параметры цветов, которые можно задавать.

Все стили задаются по следующим параметрам:

Стили текста:

Нормальный, обычный текст — 0

Повышенная яркость — 1

Пониженная яркость — 2

Подчеркнутый — 3

Нормальная яркость — 5

Инвертированный 7

Скрытый — 8

Цвета текста:

Черный 30

Красный — 31

Зеленый — 32

Желтый — 33

Синий — 34

Маджента — 35

Циановый — 36

Белый — 37

Цвет фона строки

Черный — 40

Красный — 41

Зеленый — 42

Желтый — 43

Синий — 44

Маджента — 45

Циановый — 46

Белый — 47

Теперь можно поменять строку и стилизовать ее под свой вкус и цвет.

Откроем терминал, и с помощью редактора nano откроем конфигурационный файл, командой

nano ~/.bashrc

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

Я использовал такие настройки и стили

PS1='[33[01;34m]u: [33[0;33m]w [33[01;32m]$ [33[01;32m] '

редактирование стилей bash

Естественно после внесении изменений сохраняем сочетанием клавиш Ctrl+O и выходим Ctrl+X

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

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

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

Для этого откроем в редакторе nano, так же из терминала файл /root/.bashrc командой

sudo nano /root/.bashrc

И в самом конце добавим свои стили, я использовал вот такие

PS1='[33[01;31m]u: [33[0;35m]w [33[01;32m]$ [33[01;31m]'

Не забываем после внесении изменений сохраняем сочетанием клавиш Ctrl+O и выходим Ctrl+X

По окончанию получаем вот такой результат:

Результат стилизованного bash

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

Если кому есть, что добавить или поделится своим опытом пишите в комментариях.

Всем Удачи!

15 сентября 2021

Gogh

Gogh

Color scheme for your terminal

Color Schemes For Ubuntu, Linux Mint, Elementary OS and all distributions that use Gnome Terminal, Pantheon Terminal, Tilix, or XFCE4 Terminal; initially inspired by Elementary OS Luna. Also works on iTerm for macOS. You can check out the themes here.

elementary


⚙️ Pre-Install

In your terminal type:

sudo apt-get install dconf-cli uuid-runtime

You can now install in interactive mode (easy) or non-interactive mode (ideal for scripting)

⚙️ Install (interactive mode)

1. Just copy and paste this one-line command:

bash -c "$(wget -qO- https://git.io/vQgMr)"

Or, if you are a Mac user:

bash -c "$(curl -sLo- https://git.io/vQgMr)"

2. Select the color theme installed from the terminal

DEMO:

gogh-demo-profile

Install (non-interactive mode)

# clone the repo into "$HOME/src/gogh"
mkdir -p "$HOME/src"
cd "$HOME/src"
git clone https://github.com/Gogh-Co/Gogh.git gogh
cd gogh

# necessary in the Gnome terminal on ubuntu
export TERMINAL=gnome-terminal

# necessary in the Alacritty terminal
pip install -r requirements.txt
export TERMINAL=alacritty

# Enter themes dir
cd themes

# install themes
./atom.sh
./dracula.sh

💻 Terminals

  • Alacritty — Web
  • Cygwin — Web
  • Foot — Web
  • Gnome — Web
  • Guake — Web
  • iTerm — Web
  • Kitty — Web
  • Konsole — Web
  • Mate — Web
  • Mintty — Web
  • Pantheon / Elementary — Web
  • Tilix — Web
  • XFCE4 — Web

🎨 Themes

We have lots of themes. Check them out here!

also all themes in json format: https://raw.githubusercontent.com/Gogh-Co/Gogh/master/data/themes.json

📌 How to

If you want to create your own color scheme or contribute to the project, start here.

🤔 Help

❤️ Credits:

  • 4bit
  • Bluloco Light Theme
  • Catppuccin
  • Chalk by Sindre Sorhus
  • Dracula by Zeno Rocha
  • Elementary OS
  • Everblush
  • Everforest Dark & Light theme set by Sainnhe Park
  • Fairy Floss
  • Flat Remix
  • Flat UI Terminal Theme
  • Gooey by Matt Harris
  • Gotham by Andrea Leopardi
  • Gruvbox by Pavel Pertsev
  • Hemisu by Noah Frederick
  • kokuban by ygkn
  • Monokai by Wimer Hazenberg
  • Nightfox
  • Ocean by Fabian Perez
  • Omni
  • One Dark & Light theme set by Nathan Buchar
  • Panda by Siamak
  • Peppermint by Noah Frederick
  • Rosé Pine
  • SMYCK by John-Paul Bader
  • Snazzy by Sindre Sorhus
  • Solarized by Ethan Schoonover
  • Sonokai by Sainnhe Park
  • Srcery by Daniel Berg
  • Summer Pop by Guillermo Aguirre
  • SynthWave ’84
  • SynthWave Alpha
  • Terminal Sexy by George Czabania
  • Tilix
  • Tokyo Night
  • Tomorrow color theme set by Chris Kempson
  • Material theme by Mitchel van Eijgen and Liu Xinan
  • KANAGAWA.nvim

❤️ Contributors:

  • @contributors

Why Gogh?

There is no blue without yellow and without orange.
— Vincent Van Gogh

Author

  • Miguel D. Quintero — Lanet.co

💵 Buy me a coffee — paypal

📣 Mentions

  • VSCode Theme
  • Awesome-Shell
  • Hipertextual
  • MuyLinux
  • Reddit — elementaryos
  • dev.to

Themes in json format

In your terminal type:

This generates a json file located at gh-pages/data/themes.json

Original script source: https://gist.github.com/rapgru/09b449285231d18f4e4536c5f48fc927

🌟 Stargazers over time

Stargazers over time

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить цвет тени css
  • Как изменить цвет темы эксель
  • Как изменить цвет темы на компе
  • Как изменить цвет темы на виндовс 7
  • Как изменить цвет темы на андроид

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии