it-swarm-ru.tech

Окраска вашего терминала и среды Shell?

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

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

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

Вот несколько советов из моей настройки после долгих экспериментов:

  1. Я склонен устанавливать TERM=xterm-color, который поддерживается на большинстве хостов (но не на всех).
  2. Я работаю на разных хостах, разных версиях ОС и т.д. Я использую все, от macOS X, Ubuntu Linux, RHEL/CentOS/Scientific Linux и FreeBSD. Я стараюсь сделать вещи простыми и общими, если это возможно.
  3. Я делаю кучу работы, используя GNU screen, что добавляет еще один интересный уровень.
  4. Многие ОС устанавливают такие параметры, как dircolors и ​​по умолчанию, и я не хочу изменять это на сотне разных хостов. Поэтому я стараюсь придерживаться значений по умолчанию. Вместо этого я настраиваю цветовую конфигурацию моего терминала.
  5. Используйте цвет для некоторых nix-команд (ls, grep, less, vim) и Bash Prompt . Кажется, что эти команды используют стандарт " escape-последовательности ANSI ". Например:

    alias less='less --RAW-CONTROL-CHARS'
    export LS_OPTS='--color=auto'
    alias ls='ls ${LS_OPTS}'
    

Я отправлю свое .bashrc и ​​ответить на мой собственный вопрос Jeopardy Style.

267
Stefan Lasiewski

Вот несколько вещей, которые вы можете сделать:

Редакторы + код
Многие редакторы имеют поддержку подсветки синтаксиса. vim и ​​emacs по умолчанию включены. Вы также можете включить его в nano .

Вы также можете синтаксически выделить код на терминале, используя Pygments в качестве инструмента командной строки.

Grep
grep --color=auto выделяет все совпадения. Вы также можете использовать export GREP_OPTIONS='--color=auto' чтобы сделать его постоянным без псевдонима. Если вы используете --color=always, это будет использовать цвет, даже когда он используется , что сбивает с толку.

Ls

ls --color=always

Цвета указаны по:

export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33'

(подсказка: dircolors может быть полезным)

PS1
Вы можете настроить PS1 (Shell Prompt) на использование цветов. Например:

PS1='\e[33;1m\[email protected]\h: \e[31m\W\e[0m\$ '

Будет производить PS1, как:

[желтый] lucas @ ubuntu: [красный] ~ [обычный] $

Вы можете стать действительно творческим с этим. Как идея:

PS1='\e[s\e[0;0H\e[1;33m\h    \t\n\e[1;32mThis is my computer\e[u[\[email protected]\h:  \w]\$ '

Ставит панель в верхней части вашего терминала с некоторой случайной информацией. (Для достижения наилучших результатов также используйте alias clear="echo -e '\e[2J\n\n'".)

Избавление от Escape-последовательностей

Если что-то застряло при выводе цвета, когда вы этого не хотите, я использую эту строку sed, чтобы убрать escape-последовательности:

sed "s/\[^[[0-9;]*[a-zA-Z]//gi"

Если вы хотите более аутентичный опыт, вы также можете избавиться от строк, начинающихся с \e[8m, который указывает терминалу скрыть текст. (Широко не поддерживается.)

sed "s/^\[^[8m.*$//gi"

Также обратите внимание, что эти ^ [s должны быть действительными, буквальными ^ [s. Вы можете ввести их, нажав ^ V ^ [в bash, то есть Ctrl + VCtrl + [,.

123
Lucas Jones

Я также использую:

export TERM=xterm-color
export GREP_OPTIONS='--color=auto' GREP_COLOR='1;32'
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad

И если вам нравится раскрашивать подсказки, вам могут пригодиться определенные цветовые переменные:

export COLOR_NC='\e[0m' # No Color
export COLOR_WHITE='\e[1;37m'
export COLOR_BLACK='\e[0;30m'
export COLOR_BLUE='\e[0;34m'
export COLOR_LIGHT_BLUE='\e[1;34m'
export COLOR_GREEN='\e[0;32m'
export COLOR_LIGHT_GREEN='\e[1;32m'
export COLOR_CYAN='\e[0;36m'
export COLOR_LIGHT_CYAN='\e[1;36m'
export COLOR_RED='\e[0;31m'
export COLOR_LIGHT_RED='\e[1;31m'
export COLOR_PURPLE='\e[0;35m'
export COLOR_LIGHT_PURPLE='\e[1;35m'
export COLOR_BROWN='\e[0;33m'
export COLOR_YELLOW='\e[1;33m'
export COLOR_GRAY='\e[0;30m'
export COLOR_LIGHT_GRAY='\e[0;37m'

И тогда моя подсказка выглядит примерно так:

case $TERM in
     xterm*|rxvt*)
         local TITLEBAR='\[\033]0;\u ${NEW_PWD}\007\]'
          ;;
     *)
         local TITLEBAR=""
          ;;
    esac

local UC=$COLOR_WHITE               # user's color
[ $UID -eq "0" ] && UC=$COLOR_RED   # root's color

PS1="$TITLEBAR\n\[${UC}\]\u \[${COLOR_LIGHT_BLUE}\]\${PWD} \[${COLOR_BLACK}\]\$(vcprompt) \n\[${COLOR_LIGHT_GREEN}\]→\[${COLOR_NC}\] "  

$ (vcprompt) вызывает сценарий python в моем ~/sbin), который печатает информацию контроля версий о текущем пути. Он включает поддержку Mercurial, Git, Svn, Cvs и т. д. Автор скрипт имеет источник здесь .

Bash Prompt screenshot

Это полный исходный код моей конфигурации подсказок:

86
Kris

grep и ​​ls уже упоминалось, если вы хотите проверить намного больше цветов Generic Coloriser , его первоначальная цель состояла в том, чтобы раскрасить лог-файлы, но прямо из также он раскрашивает ping, traceroute, gcc, make, netstat, diff, last, ldap и ​​cvs.

Это легко расширить, если вы знаете регулярные выражения. Я добавил ps и ​​nmap в список (если вы попадете в grc, я буду более чем рад поделиться файлами .conf для этих двух инструментов)

(Кстати, чтобы установить его через synaptic, pacman, и вам, возможно, повезет больше в поиске "grc")

18
Sygo

На протяжении многих лет я оттачивал свой .bashrc для работы как с OSX, так и с Ubuntu.
Я также уменьшил его размер до 28 строк с компактными условиями.
С ним моя PS1 Prompt выглядит так: enter image description here

со временем красным, имя пользователя зеленым, имя машины светло-синим, pwd темно-синим и git ветвь желтым.

Особенность моего PS1 Prompt:

  • показывает ветку мерзавца!
  • длинные пути к каталогам (более 6 элементов) "обрезаются", чтобы показать верхние 3 и нижние 3 каталоги с помощью _ между тем (это pwd sed часть МЕСТО).
  • возврат каретки в конце, так что подсказка всегда слева!

Соответствующие строки из моего .bashrc файл:

git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
Host='\033[02;36m\]\h'; Host=' '$Host
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$Host$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'

Для ls с цветами, когда они доступны, и без ошибок, когда нет (т.е. OSX):

ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
12
Michael Durrant

Цвета для справочных страниц ( более подробно ):

function _colorman() {
  env \
    LESS_TERMCAP_mb=$(printf "\e[1;35m") \
    LESS_TERMCAP_md=$(printf "\e[1;34m") \
    LESS_TERMCAP_me=$(printf "\e[0m") \
    LESS_TERMCAP_se=$(printf "\e[0m") \
    LESS_TERMCAP_so=$(printf "\e[7;40m") \
    LESS_TERMCAP_ue=$(printf "\e[0m") \
    LESS_TERMCAP_us=$(printf "\e[1;33m") \
      "[email protected]"
}
function man() { _colorman man "[email protected]"; }
function perldoc() { command perldoc -n less "[email protected]" |man -l -; }

Цвета для grep (1;32 ярко-зеленый, см. другие посты здесь для других цветов):

GREP_OPTS='--color=auto'      # for aliases since $GREP_OPTIONS is deprecated
GREP_COLOR='1;32'             # (legacy) bright green rather than default red
GREP_COLORS="ms=$GREP_COLOR"  # (new) Matching text in Selected line = green
alias   grep='grep $GREP_OPTS'
alias egrep='egrep $GREP_OPTS'
alias fgrep='fgrep $GREP_OPTS'

Другие цвета для GNU ls :

# use the config at ~/.dircolors if it exists, otherwise generate anew
eval "$( dircolors --sh $(ls -d ~/.dircolors 2>/dev/null) )"

# Usage: _ls_colors_add BASE NEW [NEW...]
# Have LS color given NEW extensions the way BASE extension is colored
_ls_colors_add() {
  local BASE_COLOR="${LS_COLORS##*:?.$1=}" NEW
  if [ "$LS_COLORS" != "$BASE_COLOR" ]; then
    BASE_COLOR="${BASE_COLOR%%:*}"
    shift
    for NEW in "[email protected]"; do
      if [ "$LS_COLORS" = "${LS_COLORS#*.$NEW=}" ]; then
        LS_COLORS="${LS_COLORS%%:}:*.$NEW=$BASE_COLOR:"
      fi
    done
  fi
  export LS_COLORS
}

_ls_colors_add Zip jar xpi            # archives
_ls_colors_add jpg ico JPG PNG webp   # images
_ls_colors_add ogg opus               # audio (opus now included by default)

CLICOLOR=1   # BSD auto-color trigger (like  ls -G  but for everything)
if ls -ld --color=auto / >/dev/null 2>&1
  then alias ls="ls -ph --color=auto"
  else alias ls="ls -ph"
fi

Установите grc ( Generic Colouriser ) и добавьте его в свои псевдонимы:

# using this as a variable allows easier calling down lower
export GRC='grc -es --colour=auto'

# loop through known commands plus all those with named conf files
for cmd in g++ head ld ping6 tail traceroute6 `locate grc/conf.`; do
  cmd="${cmd##*grc/conf.}"  # we want just the command
  # if the command exists, alias it to pass through grc
  type "$cmd" >/dev/null 2>&1 && alias "$cmd"="$GRC $cmd"
done

# This needs run-time detection. We even fake the 'command not found' error.
configure() {
  if [[ -x ./configure ]]; then
    colourify ./configure "[email protected]"
  else
    echo "configure: command not found" >&2
    return 127
  fi
}

# GRC plus LS awesomeness (assumes you have an alias for ls)
unalias ll 2>/dev/null
if ls -ld --color=always / >/dev/null 2>&1; then GNU_LS="--color=always"; fi

ll() {
  if [[ -t 1 ]] || [[ -n "$CLICOLOR_FORCE" ]]
    then colourify ls -l $GNU_LS "[email protected]"
    else ls -l "[email protected]"
  fi
}

Цвета для diff : слишком много содержимого для функции, используйте сценарий и добавьте псевдоним в файл rc (ненужно, если вы установили grc ):

#!/usr/bin/Perl
use strict;
use warnings;

open (DIFF, "-|", "diff", @ARGV) or die $!;

my $ydiff = 1;
while (<DIFF>) {
  if (not -t 1) {
    print;
    next;
  }
  chomp;
  $ydiff = 0 if /^[ <>\@+-]/ or ($. == 1 && /^\d+[a-z]{1,5}\d+$/);
  my $color = "";
  if (! $ydiff && /^[\@+-<>]/) {
    $color = (/^[<-](?!--$)/ ? 1 : /^[+>]/ ? 2 : 5);
  } elsif ($ydiff && /\t {6}([<|>])(?:\t|$)/) {
    $color = ($1 eq "<" ? 1 : $1 eq ">" ? 2 : 4);
  }
  $color ? printf ("\e[1;3%dm%s\e[0;0m\n",$color,$_) : print "$_\n";
}
close DIFF;

Цвета для bash Prompt :

# Shorten home dir, cygwin drives, paths that are too long
if [ -d /cygdrive ] && uname -a |grep -qi cygwin; then CYGWIN_OS=1; fi
function PSWD() {
  local p="$*" space A B cols="${COLUMNS:-`tput cols 2>/dev/null || echo 80`}"
  p="${p/$HOME/\~}"         # shrink home down to a tilde
  if [ -n "$CYGWIN_OS" ] && [ "${p#/cygdrive/?/}" != "$p" ]; then
    p="${p:10:1}:${p:11}"   # /cygdrive/c/hi -> c:/hi
  fi
  space="$((${#USER}+${#HOSTNAME}+6))"  # width w/out the path
  if [ "$cols" -lt 60 ]; then echo -n "$N "; space=-29; p="$p$N\b"; fi
  if [ "$cols" -lt "$((space+${#p}+20))" ]; then # < 20 chars for the command
    A=$(( (cols-20-space)/4 ))      # a quarter of the space (-20 for cmd)
    if [ $A -lt 4 ]; then A=4; fi   # 4+ chars from beginning
    B=$(( cols-20-space-A*2 ))      # half (plus rounding) of the space
    if [ $B -lt 8 ]; then B=8; fi   # 8+ chars from end
    p="${p:0:$A}..${p: -$B}"
  fi
  echo "$p"
}

PSC() { echo -ne "\[\033[${1:-0;38}m\]"; }
PR="0;32"       # default color used in Prompt is green
if [ "$(id -u)" = 0 ]; then
    Sudo=41     # root is red background
  Elif [ "$USER" != "${Sudo_USER:-$USER}" ]; then
    Sudo=31     # not root, not self: red text
  else Sudo="$PR"   # standard user color
fi
Prompt_COMMAND='[ $? = 0 ] && PS1=${PS1[1]} || PS1=${PS1[2]}'
PSbase="$(PSC $Sudo)\u$(PSC $PR)@\h $(PSC 33)\$(PSWD \w)"
PS1[1]="$PSbase$(PSC $PR)\$ $(PSC)"
PS1[2]="$PSbase$(PSC  31)\$ $(PSC)"
PS1="${PS1[1]}"
unset Sudo PR PSbase

demo of bash Prompt

9
Adam Katz

Установите жирный/цветной подсказки. От cyberciti.biz и BashFAQ

# 'tput bold' will work regardless of the foreground and background colors.
# Place the tput output into variables, so they are only execd once.
bold=$(tput bold) # This could also be a color.
reset=$(tput sgr0)
export PS1="\[email protected]\[$bold\]\h\[$reset\]:\w \$ "

Мне также удалось найти настройки цвета, которые широко поддерживаются и которые не печатают символы гоблидов в старых средах (даже FreeBSD4!), И, кажется, работают нормально, если TERM = vt100, xterm, xterm-color. (По большей части). Из моего .bashrc:

# Set some options, based on the OS
OS=`uname -s` 

case "$OS" in
    "SunOS" ) 
        # Solaris ls doesn't allow color, so use special characters
        LS_OPTS='-F'
        alias  ls='ls ${LS_OPTS}'
        ;;
    "Linux" )
        # GNU ls supports colors!
        # See dircolors to customize colors
        export LS_OPTS='--color=auto' 
        alias  ls='ls ${LS_OPTS}'

        # Get color support for 'less'
        export LESS="--RAW-CONTROL-CHARS"

        # Use colors for less, man, etc.
        [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP

        export GREP_OPTIONS="--color=auto"

        ;;
    "Darwin"|"FreeBSD")

        # Most FreeBSD & Apple Darwin supports colors
        export CLICOLOR=true
        # Get color support for 'less'
        export LESS="--RAW-CONTROL-CHARS"

        # Use colors for less, man, etc.
        [[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP

        export GREP_OPTIONS="--color=auto"
        ;;
    * ) 
        echo "Unknown OS [$OS]"
        ;;
esac
8
Stefan Lasiewski

Для команды ls есть хороший инструмент для настройки цветов - http://geoff.greer.fm/lscolors/

5
Rob Cowell

То, что еще не было сказано здесь:

Чтобы раскрасить вывод ваших компиляций с помощью gcc, есть colorgcc от Johannes Schlüter

Для раскрашивания логов есть мультитейл

Чтобы раскрасить любой стандартный вывод, я собрал xcol

xcol example

Я лично использую их из инструмента xcol.

#normal=$(tput sgr0)                      # normal text
normal=$'\e[0m'                           # (works better sometimes)
bold=$(tput bold)                         # make colors bold/bright
red="$bold$(tput setaf 1)"                # bright red text
green=$(tput setaf 2)                     # dim green text
fawn=$(tput setaf 3); beige="$fawn"       # dark yellow text
yellow="$bold$fawn"                       # bright yellow text
darkblue=$(tput setaf 4)                  # dim blue text
blue="$bold$darkblue"                     # bright blue text
purple=$(tput setaf 5); Magenta="$purple" # Magenta text
pink="$bold$purple"                       # bright Magenta text
darkcyan=$(tput setaf 6)                  # dim cyan text
cyan="$bold$darkcyan"                     # bright cyan text
gray=$(tput setaf 7)                      # dim white text
darkgray="$bold"$(tput setaf 0)           # bold black = dark gray text
white="$bold$gray"                        # bright white text

Я использую эти переменные в моих сценариях, как так

echo "${red}hello ${yellow}this is ${green}coloured${normal}"

Мне также нравится эта маленькая функция ColoredEcho (находится в Stack Overflow)

function coloredEcho(){
    local exp=$1;
    local color=$2;
    if ! [[ $color =~ '^[0-9]$' ]] ; then
       case $(echo $color | tr '[:upper:]' '[:lower:]') in
        black) color=0 ;;
        red) color=1 ;;
        green) color=2 ;;
        yellow) color=3 ;;
        blue) color=4 ;;
        Magenta) color=5 ;;
        cyan) color=6 ;;
        white|*) color=7 ;; # white or invalid color
       esac
    fi
    tput setaf $color;
    echo $exp;
    tput sgr0;
}

coloredEcho "This text is green" green

Извините, запрещено размещать больше ссылок

5
nachoparker

Я предлагаю вам проверить ZSH и его плагин oh-my-zsh , который имеет одну из самых мощных консольных функций, которые я видел , Одним из них является выбор темы для вашего терминала. Это пример моей темы ... В tty цвета не такие теплые, но они такие же, как на этой картинке ... В любом случае, вам это понравится!

enter image description here

4
user92622

Для просмотра различий в цвете используйте colordiff .

Sudo apt-get install colordiff

Передайте любой вывод diff-формата в colordiff:

output of diff piped into colordiff

Это включает в себя некоторые из альтернативных форматов diff, таких как -y (бок о бок.)

В качестве альтернативы, если он вызывается автономно (без каких-либо вложений), он действует как обертка вокруг 'diff' и окрашивает вывод. Следовательно, у меня есть это в моем .bashrc, для псевдонима 'diff' к colordiff.

# if colordiff is installed, use it
if type colordiff &>/dev/null ; then
    alias diff=colordiff
4
Jonathan Hartley

Для настройки подсказки у меня это есть в моем файле .bashrc.

#Set variables for foreground colors
fgRed=$(tput setaf 1)     ; fgGreen=$(tput setaf 2)  ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7)   ; fgBlack=$(tput setaf 0)
#Set variables for background colors
bgRed=$(tput setab 1)     ; bgGreen=$(tput setab 2)  ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7)   ; bgBlack=$(tput setab 0)
#Set variables for font weight and text decoration
B=$(tput bold) ; U=$(tput smul) ; C=$(tput sgr0)
#NOTE: ${C} clears the current formatting

if [[ $USER = "root" ]]; then
  PS1="${B}${fgRed}\u${C}@\h(\s): ${fgGreen}\w${C} > "
else
  PS1="${B}${fgCyan}\u${C}@\h(\s): ${fgGreen}\w${C} > "
fi

Это дает мне подсказку, которая выглядит примерно так:

[email protected](bash): ~/bin >

Рабочий каталог в зеленом. И имя пользователя будет жирным и голубым, если я не запустил оболочку с Sudo, в этом случае имя пользователя ("root") будет выделено жирным и красным цветом.

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

Причина, по которой я использую tput, заключается в том, что он должен поддерживаться более универсально, чем странный 033[01;31m\] последовательности. Кроме того, в качестве дополнительного бонуса, если вы делаете echo $PS1 в приглашении вы увидите необработанное приглашение с colors вместо этих неразборчивых последовательностей управления.

3
Sildoreth

Некоторое оформление текста (жирный) позволяет легко различать root и некорневую оболочку. Для Zsh:

if test $UID = 0
    then PS1="%B${PS1}%b "
fi

Для Баш:

if test $UID = 0
    then PS1="\033[1m${PS1}\033[0m"
fi
3
Mischa Arefiev

Я просто удивился тому же. У меня свой подход, но я ищу альтернативы.

Я пишу bash-оболочки вокруг вызовов программ и передаю их результаты через sed. Что мне нравится в sed, так это то, что он будет изменять и отображать каждую строку сразу => не слишком много буферизации. Однако мне не нравится, что при каждом вызове упакованной программы код sed анализируется и компилируется.

Например, это то, что я делаю, чтобы раскрасить вывод ip:

#
# Colorcodes
#
NORMAL=`echo -e '\033[0m'`
RED=`echo -e '\033[31m'`
GREEN=`echo -e '\033[0;32m'`
LGREEN=`echo -e '\033[1;32m'`
BLUE=`echo -e '\033[0;34m'`
LBLUE=`echo -e '\033[1;34m'`
YELLOW=`echo -e '\033[0;33m'`


#
# command: ip
# highlight ip addresses, default route and interface names
#

IP4=$GREEN
IP6=$LBLUE
IFACE=${YELLOW}
DEFAULT_ROUTE=$LBLUE

IP_CMD=$(which ip)

function colored_ip()
{
${IP_CMD} [email protected] | sed \
    -e "s/inet [^ ]\+ /${IP4}&${NORMAL}/g"\
    -e "s/inet6 [^ ]\+ /${IP6}&${NORMAL}/g"\
    -e "s/^default via .*$/${DEFAULT_ROUTE}&${NORMAL}/"\
    -e "s/^\([0-9]\+: \+\)\([^ \t]\+\)/\1${IFACE}\2${NORMAL}/"
}

alias ip='colored_ip'
3
Bananguin

Вы можете использовать мой cf для окрашивания имен файлов в командной строке, это быстрый маленький основанный на awk colorizer, который работает через каналы - раскраска имен файлов в Truecolor sRGB.

Он имеет ярко окрашенную конфигурацию по умолчанию и, в отличие от ls, не страдает от снижения производительности за добавление новых цветов. (ls должен сканировать всю строку LS_COLORS для каждого промаха).

https://github.com/AdamDanischewski/cf

cf usage

cf screenshot

2
A.Danischewski

Я считаю Solarized полезным. Это аккуратный проект с однородными цветами для множества приложений.

http://ethanschoonover.com/solarizedhttps://github.com/altercation/solarized

2
Vamsi

Отличный универсальный Python инструмент для окраски вывода команд: ' colout '

Вы даете ему регулярное выражение с N группами, за которым следует разделенный запятыми список из N цветов. Любой текст, соответствующий группе, будет отображаться соответствующим цветом.

Так, например, если вы смотрите на некоторые результаты теста:

python -m unittest discover -v

Uncolored output of some Python unittests

тогда вы можете украсить его:

python -m unittest discover -v 2>&1 | colout '(.*ERROR$)|(.*FAIL$)|(\(.*\))' red,yellow,black bold

Colored output of some Python unittests

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

Обратите внимание, как я должен был добавить 2>&1 до конца вызова Python, потому что вывод unittest находится на stderr, поэтому я перенес его в stdout, чтобы можно было передать его в colout.

Как правило, это настолько просто в использовании, что я часто создаю новые вызовы colout на лету и повторно использую или изменяю их из своей истории командной строки.

Единственным недостатком является то, что он поставляется как Python, а не автономный исполняемый файл, поэтому вам нужно установить его с помощью pip или Sudo python setup.py install.

2
Jonathan Hartley

Вы можете попробовать проект, который также помогает при раскрашивании скриптов, который называется ScriptEchoColor в source forge: http://scriptechocolor.sourceforge.net/

напр .:

echoc "@{lr}text output in light red"
echoc "@{bLGu}text outpus in blue, light green background and underlined"
echoc "you @{lr} can @{bLGu} mix @{-a} it all too"
echoc -x "ls" #executes ls command and colorizes it automatically to be easy to be seen

Автоматические цвета настраиваются.

Вот пример, сделанный с ним: enter image description here

2
Aquarius Power

Я использую цветная обертка .

cw - это ненавязчивая оболочка цвета ANSI реального времени для распространенных команд на основе unix в GNU/linux. cw предназначен для имитации среды выполняемых команд, так что, если человек наберет "du", "df", "ping" и т. д. в своей оболочке, он автоматически раскрасит вывод в реальном времени в соответствии с определением файл, содержащий желаемый формат цвета. cw поддерживает раскраску совпадений с подстановочными знаками, разметку токенов, колонтитулы, раскраски сценариев, окраски определений, зависящих от командной строки, и включает более 50 готовых файлов определений.

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

1
user3132194

если вы хотите сделать свой vim разноцветным, как и я, я предлагаю вам выполнить два шага:

  1. узнайте, как включить эту функцию, перейдя по этой ссылке: включить цветную подсветку синтаксиса в vi или vim .

ключевые шаги в ссылке:

  1. Отредактируйте файл ~/.vimrc, введя команду: vi ~/.vimrc

  2. Добавьте следующую опцию: синтаксис включен

  3. Сохраните и закройте файл

  4. Проверьте это с помощью команды vim: vim foo.sh

  1. найдите цветовую схему, которая вам нравится, и используйте ее. Схема, которую я использую: схема, которую я использую
0
ZhaoGang

Я хотел бы смиренно рекламировать мою недавнюю публикацию of ta or textattr, библиотеку и инструмент командной строки, который призван сделать добавление цвета и атрибуты, чтобы украсить вывод терминала вашей программы, переводя понятные человеку спецификации в управляющие коды ANSI.

Например:

echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"

или еще короче

echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"

или альтернативный:

tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"

даст вам что-то вроде:

enter image description here

В настоящее время эта библиотека может использоваться на четырех языках C, C++, D и Python, кроме использования командной строки из вашей любимой оболочки).

Обратите внимание, что он не окрашивает автоматически результаты других программ. Это скорее утилита, которая поможет вам не запоминать заумные коды. Вам нужно использовать только очевидные названия цветов или их легко запоминающиеся rgb cmyk w(hite) (of) f сокращения.

Для более подробной информации посетите репозиторий textattr .

0
jamadagni

Для Mac вы можете использовать следующее как указано здесь

if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
0
doesnt_matter

Если вы выбрали bash, я рекомендую oh-my-bash . Если zsh - ваш выбор, я рекомендую oh-my-zsh . Оба поддерживают раскраску вашего терминала и разные выходы.

0
TimWirtjes