Terminalinizi ve kabuk ortamınızı renklendiriyor musunuz?


262

Zamanımın çoğunu Unix ortamlarında çalışarak ve terminal emülatörleri kullanarak geçiriyorum. Rengi komut satırında kullanmaya çalışıyorum çünkü renk çıktıyı daha kullanışlı ve sezgisel hale getiriyor.

Terminal ortamıma renk eklemek için hangi seçenekler var? Hangi püf noktalarını kullanıyorsun? Hangi tuzaklara rastladınız?

Ne yazık ki, renk desteği terminal türüne, işletim sistemine, TERM ayarına, yardımcı programa, buggy uygulamalarına vb. Bağlı olarak değişir.

İşte deneyimlerden sonra kurulumumdan bazı ipuçları:

  1. TERM=xterm-colorÇoğu ana bilgisayarda (ancak hepsinde desteklenmiyor) desteklenme eğilimindeyim .
  2. Birkaç farklı ana bilgisayar, farklı işletim sistemi sürümleri vb. Üzerinde çalışıyorum. Her şeyi macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux ve FreeBSD'den kullanıyorum. Mümkünse işleri basit ve genel tutmaya çalışıyorum.
  3. screenBaşka bir eğlence katmanı ekleyen GNU'yu kullanarak bir sürü iş yapıyorum .
  4. Pek çok işletim sistemi bir şeyleri dircolorsvarsayılan ve varsayılan olarak ayarlar ve bunu yüz farklı ana bilgisayarda değiştirmek istemiyorum. Bu yüzden varsayılanlara bağlı kalmaya çalışıyorum. Bunun yerine, terminalimin renk yapılandırmasını değiştiriyorum.
  5. Bazıları için kullanın renk Unix komutları ( ls, grep, less, vim) ve Bash istemi . Bu komutlar standart " ANSI kaçış dizileri " kullanıyor gibi görünüyor . Örneğin:

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

Ben kendime yazı göndereceğim .bashrcve kendi sorumu Jeopardy Style'a cevaplayacağım.


Benim yaklaşımım (aşağıdaki cevaba bakınız) OSX ve Linux farklarıyla ilgili sorunları ele almaktadır; örneğin, birindeki renk ls -G, diğer yandan ls --color-auto
Michael Durrant

1
Sütunları renklendirmek için bir araç gören oldu mu? Bu bir column -t --colormi?
Tomáš Pospíšek

Yanıtlar:


121

İşte yapabileceğiniz birkaç şey:

Editörler + Kod
Birçok editör sözdizimi vurgulama desteğine sahiptir. vimve emacsvarsayılan olarak açık. Altındanano da etkinleştirebilirsiniz .

Komut satırı aracı olarak Pygments'ı kullanarak terminaldeki vurgulama kodunu da sözdizimi yapabilirsiniz .

grep
grep --color=auto tüm karşılaşmaları vurgular. export GREP_OPTIONS='--color=auto'Takma adı olmadan kalıcı yapmak için de kullanabilirsiniz . Kullanırsanız , boruları karıştırırken bile renkleri kullanır --color=always, bu da işleri karıştırır.

ls

ls --color=always

Belirtilen renkler:

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

(ipucu: yardımcı dircolorsolabilir)

PS1
PS1'inizi (kabuk istemi) renkleri kullanacak şekilde ayarlayabilirsiniz. Örneğin:

PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '

Gibi bir PS1 üretecek:

[sarı] lucas @ ubuntu: [kırmızı] ~ [normal] $

Bununla gerçekten yaratıcı olabilirsiniz. Bir fikir olarak:

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

Terminalinizin üstüne bazı rasgele bilgiler içeren bir çubuk yerleştirin. (En iyi sonuçları elde etmek için de kullanın alias clear="echo -e '\e[2J\n\n'".)

Kaçış Dizilerinden Kurtulma

Bir şey istemediğiniz zaman çıktı veren renk sıkışmışsa sed, kaçış dizilerini soymak için bu çizgiyi kullanırım:

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

Daha özgün bir deneyim istiyorsanız \e[8m, terminale metni gizlemesini söyleyen satırlardan kurtulabilirsiniz . (Yaygın olarak desteklenmiyor.)

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

Ayrıca, bu ^ [’lerin gerçek olması gerektiğine de dikkat edin, ^ ^ V ^ [, bash, Ctrl+ V, Ctrl+ tuşlarına basarak bunları yazabilirsiniz [.


1
İlk PS1 satırı şöyle okumalısınız: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Dördüncü ters eğik çizgiden sonra gereksiz bir x var.
Chris,

3
Kaçışlar içine alınmalı \[...\]yoksa ikinci satırdaki komutlar ilk satırın üzerine yazacaktır. PS1 = '[\ e [33; 1m] \ u @ \ h: [\ e [31m] \ W \ e [0m \ $'
yanglifu90 19

ls --color=alwaysÇalışmıyor. @Michael Durrant'ın yaklaşımı bunun için daha iyidir:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Simon C.

83

Ben de kullanırım:

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

Komut isteminizi renklendirmeyi seviyorsanız, tanımlanmış renk çeşitleri yararlı olabilir:

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'

Ve sonra benim istemi böyle bir şeydir:

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), şu anki yolla ilgili sürüm kontrol bilgilerini basan ~ / sbin sistemimde bir python betiği çağırıyor. Mercurial, Git, Svn, Cvs vb. İçin destek içerir. Senaryonun yazarı burada kaynağa sahiptir .

Bash prompt ekran görüntüsü

Bu benim istemi yapılandırmamın tam kaynağıdır :


Yukarıdaki PS1'i kullandığımda karşılaştığım bir hat probleminin çözümü için buraya bakın: stackoverflow.com/questions/5087036/…
Xander Dunn

İstemdeki renkler için çıkış braketlerini yansıtacak şekilde yanıtı güncelleştirdim. Teşekkürler!
Kris

1
$LSCOLORSve $CLICOLORBSD'ler içindir. GNU ls (Linux) $LS_COLORSfarklı bir sözdizimi ile kullanır . GNU bana kendimi ev gibi hissettiği için, LSCOLORS=exgxfxDacxBaBaCaCaeaEaGNU’nun renklerini BSD’de taklit etmek için kullanıyorum .
Adam Katz

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
Steven Almeroth

1
.bashrcDeğişikliğin etkili olabilmesi için dosyayı kaynaklamanız gerekebilir . Aşağıdaki komutla yapabilirsiniz. source /path/to/.bashrc
François,

18

grepve lszaten çok daha fazla renk kontrol istiyorsanız, söz edilmiştir Jenerik Coloriser , ilk amaç logfiles renklendirmek için, ama kutudan çıktığı o da renklendirir ping, traceroute, gcc, make, netstat, diff, last, ldap, ve cvs.

Eğer regexes biliyorsanız kolayca genişletilebilir. Ekledim psve nmaplisteye eklediysen (içine girersen grc, bu iki araç için .conf dosyalarını paylaşmaktan daha mutlu olacağım)

(Btw, bunu yoluyla yüklemek için synaptic, pacmanve hem daha iyi şans "grc" araması sahip olabilir)


grcşimdi psvarsayılan olarak desteklemektedir . nmapRenklendirmelerinize ilgi duyarım . Ayrıca bkz. Bunların hepsini, grc'yi yükselttiğinizde yeni komutları özümseyecek şekilde takma yanıtım.
Adam Katz

Onu farkettim. işte benim conf.nmap (ve diğer her şey, gerçekten) gist.github.com/sygo/844982#file-conf-nmap - infosec'te çalıştığını fark ettim, conf.hexdump ilginç bulabilirsin, henüz bitmedi rağmen.
Sygo

@Sygo teşekkürler. Çeneni çatalladım ve revize ettim. Aslında hiçbir zaman git ile bir veri işleme girmedim (yalnız github'un rehberleri hariç) ve bunu size nasıl birleştirmeyi teklif edeceğimi bilemiyorum (Sanırım bunun nedeni gistlerin çok basitleştirilmiş olmasıdır).
Adam Katz

Yapamayacağınızdan şüpheleniyorum, çünkü bu bir öz ve doğru bir depo değil. Çatalını da kontrol ettim ama sürümüne kesinlikle bakıyorum. Bu hex dökümü birinin neye dönüşeceğini merak ediyorum ...
Sygo

11

.Bashrc’i yıllar boyunca hem OSX hem de Ubuntu’da çalışacak şekilde uyardım.
Ayrıca kompakt durum ifadeleriyle boyutu 28 çizgiye düşürdüm.
Bununla beraber, PS1 istemim şöyle görünüyor: görüntü tanımını buraya girin

zaman kırmızı, kullanıcı adı yeşil, makine ismi açık mavi, koyu mavi renkte pwd ve sarı renkte git şube.

PS1 istemimin özelliği:

  • git dalını gösterir!
  • uzun dizin yolları (6'dan fazla eleman), aralarında ilk 3 ve en alt 3 dizini gösterecek şekilde 'kesilmiştir' _(bu pwd sed, LOCATION'ın bir parçasıdır).
  • Sonunda satır başı, böylece istemi her zaman solda olacak!

Dosyamdaki alakalı satırlar .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\]>'

Kullanılabilir olduğunda renkli olan ve olmadığı zaman hata olmayan ls için (örn. OSX):

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

1
Renkler lsOS X'te mevcuttur, ancak kullanılarak yapılır export CLICOLOR=1.
ThomasW

3
@ThomasW ama linux değil :-p Adam ikisini de kullanıyor.
Jimmy Kane,

1
Bununla birlikte, ThomasW, lsMacOS 10'da renklerin mevcut olmadığını söylerken cevabın yanlış olduğuna işaret etmekte haklıdır . Buradaki cevap, istemi dizgilerinin aslında hatalı olması nedeniyle de yanlıştır. Onlar yok doğru denge \[ve\] ve en az bir kişi kopyalama Bu cevap için sorunlara neden olmuştur .
JdeBP,

9

Man sayfaları için renkler ( daha fazla detay ):

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") \
      "$@"
}
function man() { _colorman man "$@"; }
function perldoc() { command perldoc -n less "$@" |man -l -; }

Grep için renkler ( 1;32parlak yeşil, diğer renkler için burada diğer yazılara bakınız):

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 için daha fazla renk :

# 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 "$@"; 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( Genel Renklendirici ) yükleyin ve takma adlarınıza ekleyin:

# 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 "$@"
  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 "$@"
    else ls -l "$@"
  fi
}

Diff için renkler : Bir işlev için çok fazla içerik, bir komut dosyası kullanın ve onu rc dosyanızın diğer adıyla (eğer yüklediyseniz gereksiz 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 istemi için renkler :

# 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

bash istemi demosu


1
Bir ekran görüntüsü için oy verin
Green

Benim PSWD()işlevi POSIX uyumlu olacak şekilde kullanılır fakat bash / zsh alt dize işleme kullanarak çok daha kolay kolaylaştırdı bu. Çok fazla soru işareti içeren ve hiçbiri terminal genişliğine uyarlanamayan POSIX sürümü için revizyon 6'ya bakınız . Ekran görüntüsünü güncellemedim, ancak 80 karakter genişliğinde yalnızca küçük bir değişiklik oldu.
Adam Katz

CLICOLOR=1FREEBSD 11.2 ile benim için çalışmıyor
Simon C.

1
@SimonC. - FreeBSD sisteminizde BSU programları yerine GNU yardımcı programlarını kullanıyor olabilirsiniz. BSD kullanmakla CLICOLOR=1 lsaynı şeyi yapmalı ls -G( ls -geski BSD'lerde). Eğer ls --colorçalışıyorsa (hatasız), GNU lskomutunu kullanıyorsunuz ve $CLICOLORyok sayılıyor.
Adam Katz

1
@SimonC. - ~/.bashrcDeğişikliklerin yürürlüğe girmesi için gerçekte sizin yüklemeniz gerekir . Ya koşar source ~/.bashrcya da yeni bir bash oturumu başlatır (bir terminal başlat ya da çalıştır bash).
Adam Katz

8

Kalın / renkli bir komut istemi ayarlayın. Gönderen cyberciti.biz ve 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="\u@\[$bold\]\h\[$reset\]:\w \$ "

Ayrıca, yaygın olarak desteklenen ve eski ortamlarda gobbledygook karakterlerini (hatta FreeBSD4! (Çoğu kısım için). Benim .bashrc'den:

# 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

1
Eğer zsh kullanmak istiyorsanız Veya, Phil Gold'un istemi aperiodic.net/phil/prompt sanat eseri.
tsvallender


5

Zaten burada söylenmemiş şeyler:

Derlemelerinizin çıktılarını gcc ile renklendirmek için, Johannes Schlüter tarafından colorgcc vardır

Günlükleri renklendirmek için multitail var

Herhangi bir stdout'u renklendirmek için, bir araya getirdim xcol

xcol örneği

Bunları şahsen xcol aracından kullanıyorum.

#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

Bu değişkenleri komut dosyalarımda böyle kullanırım

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

Ben de renkli küçük bu küçük fonksiyonu sevdim (Yığın Taşması üzerinde bulundu)

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

Üzgünüz, daha fazla bağlantı gönderemez


2
Merhaba, bilgi istemi yolu için bayrakları nasıl yapıyorsunuz? Üçgen uçlu dikdörtgen çubuklardan söz ediyorum. Teşekkürler
Artur Vieira

bir ubuntu gnu terminalinde de çalışıyor mu?
helle

lnav ayrıca renklendirilmiş logfiles göstermek için harika bir araçtır
Cyril Chaboisseau

4

Gördüğüm en güçlü konsol özelliklerinden birine sahip olan ZSH ve eklentisini oh-my-zsh'a göz atmanızı öneririm . Bunlardan biri terminaliniz için tema seçmek. Bu benim temama bir örnektir ... Renkler çok sıcak değil ama bu resimdeki gibi aynı ... Seveceğiniz bir şekilde!

görüntü tanımını buraya girin


2
Eğer yapabilseydim, bunu Oh-My-ZSH önerisi için oy kullanmam. Terminal'de yoğun olarak çalışan bir sistem mühendisi ve iş akışımı zsh / oh-my-zsh'ı benimsemeye çalışan biri olarak, ZSH'yi kimseye asla tavsiye etmeyeceğimi söyleyebilirim. Elbette, zsh'yi diğer kabuklardan sonra adlandırılmış bir dosyaya bağlayabilir ve bu kabuğu taklit edebilirsiniz, ancak bunu yaptığınızda .bashrc, .bash_profile, vb emulate bash. Bilgilerinizi okumazsınız. Dosyalar. BASH'da gelişmiş özelliklerle çalışan herkes için, sizi ısıracak birçok incelik var. BASH daha iyi bir sh.
Charles Addis

2
ZSH’nin BASH’den daha iyi olan kutudan çıkardığı tek şey komutun tamamlanmasıdır, ancak BASH’da da programlanabilir. Belki de sıradan sıradan işler dışında kabuğu kullanmayan biri ZSH'yi benimsemelidir, ancak kabuğu yoğun bir şekilde kullanması gerekenler için değildir. =~Operatör, ZSH diziler bundan yeterince yaklaşık 9 aydır ZSH / Ah-My-ZSH kullandıktan sonra, vb sizi ısırabilir işleme biçimini sizi ısırabilir. Kendi yazdığım özel bir tema kullanıyordum, onu BASH'a taşıdım ve kendi git istemi satırımı yazdım ve bir daha arkama bakmadım. Artık taşınabilirlik konusunda endişelenmiyorum
Charles Addis

1
"Gördüğüm en güçlü konsol özelliklerinden birine sahip. Bunlardan biri terminaliniz için tema seçmek."
Jonathan Hartley

@JonathanHartley, yorumunuz eksik bırakılmış gibi görünüyor. ?
Joker

2
İlginiz için teşekkür ederim ama yorumum söylemek istediğim her şeyi söylüyor.
Jonathan Hartley

4

Dif çıkışını renkli görüntülemek için colordiff kullanın .

sudo apt-get install colordiff

Herhangi bir diff formatındaki çıktıyı colordiff'e bağlayın:

colordiff içine diff boru çıkışı

Bu, diff'in bazı alternatif biçimlerini içerir -y(yan yana).

Alternatif olarak, bağımsız olarak çağrılırsa (içine herhangi bir şey eklenmemişse), 'diff' etrafında bir sarmalayıcı görevi görür ve çıktıyı renklendirir. Bu yüzden .bashrc'imde renk farklılığına 'farklılaşmak' var.

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

1
.bashrcÖrnek finalini eksik five tek hatlı komutuna dönüştürülebilir:type colordiff &> /dev/null && alias diff='colordiff'
Teemu Leisti

3

Kök ve kök olmayan kabuk arasında kolayca ayrım yapmak için bazı metin süslemesi (kalın). Zsh için:

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

Bash için:

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

Lütfen kabuğunuzu belirtin. Sorunun tek kabuğuna özgü etiketi bash , ancak kodunuzun olmadığını hissediyorum bash.
Manatwork

@ manatwork: üzgünüm, Zsh olduğunu söylemeyi unuttum. Gönderim güncellendi.
Mischa Arefiev

3

Ben de aynı şeyi merak ettim. Benim kendi yaklaşımım var ama alternatifler arıyorum.

Program çağrıları etrafına bas sarmalayıcılar yazıyorum ve çıktılarını yönlendiriyorum sed. Sevdiğim şey sedşu ki, her bir satırı hemen değiştirecek ve yankılanacak. Ancak, paketlenmiş bir programa yapılan her çağrı için sedkodun ayrıştırılması ve derlenmesinden hoşlanmam .

Örneğin, çıktılarını renklendirmek için yaptığım şey 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} $@ | 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

İstemi ayarlamak için .bashrc dosyamda bu var.

#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

Bu bana böyle bir şey görünen bir uyarı verir:

user@host(bash): ~/bin >

Çalışma dizini yeşildir. Ve ben kabuk koştu sürece kullanıcı adı kalın ve mavi sudo, bu durumda kullanıcı adı ("root") koyu ve kırmızı görüntülenir.

Şahsen, biçimlendirme kontrol karakterlerinin değişkenlerde saklanmasını seviyorum çünkü bilgi istemi ayar kodunu okumayı kolaylaştırıyor. Ayrıca, istemi düzenlemeyi çok daha kolaylaştırır.

Kullanmamın nedeni tput, tuhaf 033[01;31m\]dizilerden daha evrensel olarak desteklenmesi gerektiği . Ayrıca, ilave bir bonus olarak, echo $PS1istemde yaparsanız, anlaşılmaz kontrol dizileri yerine renkleri içeren ham istemi görürsünüz .


2

Komut dosyası çıktısını renklendirmeye yardımcı olan, kaynak forge'daki ScriptEchoColor adlı bir projeyi deneyebilirsiniz: http://scriptechocolor.sourceforge.net/

ex .:

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

Otomatik renkler yapılandırılabilir.

Bu onunla yapılan bir örnektir: görüntü tanımını buraya girin


2

Komutların çıktısını renklendiren harika bir genel amaçlı Python aracı ' colout '

N grubu içeren bir regex verin, ardından N renklerinden virgülle ayrılmış bir liste izleyin. Bir grupla eşleşen herhangi bir metin ilgili renkte gösterilecektir.

Örneğin, bazı test çıktılarına bakıyorsanız:

python -m unittest discover -v

Bazı Python özlerinin renksiz çıktısı

sonra çeki düzen verirsiniz:

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

Bazı Python merkezlerinin renkli çıktısı

Regex'imin üç gruba (parantez) ve ardından üç renge (ve isteğe bağlı olarak üç stil) sahip olup olmadığına bakın, ancak tüm renkleri 'kalın' olarak ayarlamak için bir stenografi kullandım, böylece parantez içindeki metni eşleştiren 'siyah' grubu , koyu gri gibi çıkıyor.)

Ayrıca 2>&1, Python çağrışımının sonuna nasıl eklemek zorunda kaldığımı da not edin , çünkü en küçüğü çıktıları stderr üzerindedir, bu yüzden onu colout'a aktarabilmek için stdout'a aktardım.

Bu, kullanımı o kadar kolaydır ki, kendimi sık sık hareket halindeyken yeni colout çağrıları yaratırken ve onları komut satırı geçmişimde yeniden kullanırken veya değiştirirken bulurum.

Bunun tek dezavantajı, bağımsız bir çalıştırılabilir değil, bir Python paketi olarak gelmesidir, bu yüzden pip kullanarak yüklemeniz gerekir veya sudo python setup.py install.



1

Kullanmak renk sarıcı .

cw, GNU / linux'taki ortak unix tabanlı komutlar için müdahaleci olmayan gerçek zamanlı bir ANSI renk sargısıdır. cw yürütülmekte olan komutların ortamını simüle etmek üzere tasarlanmıştır, böylece eğer bir kişi kabuğuna 'du', 'df', 'ping' vb. yazarsa, çıktıyı bir tanımlamaya göre gerçek zamanlı olarak otomatik olarak renklendirir. İstenilen renk formatını içeren dosya. cw, joker karakter eşleşmesi renklendirme, tokenize renklendirme, üstbilgiler / altbilgiler, vaka senaryo renklendirmesi, komut satırına bağlı tanım boyama için destek içerir ve 50'den fazla önceden tanımlanmış tanım dosyası içerir.

Neredeyse kesintisiz, ancak bir kez etkileşimli kabuktaki ps'nin bir borudaki ps'i karşılaştırarak farklı çıktılar döndürdüğünü gördüm.


0

Mac için burada belirtilen şekilde aşağıdakileri kullanabilirsiniz.

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

0

vimrengini aynen benim gibi yapmak istiyorsan , iki adımı uygulamanı öneririm:

  1. Bu bağlantıyı izleyerek özelliği nasıl açacağınızı öğrenin: vi veya vim ile vurgulayarak renk sözdizimini açın .

Bağlantıdaki önemli adımlar:

  1. Komutu yazarak ~ / .vimrc dosyasını düzenleyin: vi ~ / .vimrc

  2. Aşağıdaki seçeneği ekleyin: sözdizimi on

  3. Dosyayı kaydedin ve kapatın

  4. Vim komutunu çalıştırarak test edin: vim foo.sh

  1. Beğendiğiniz bir renk düzeni bulun ve kullanın. Kullandığım şema: kullandığım şema

Harici kaynağa bağlantılar kullanırken, kılavuzun ilgili bölümünün "Bağlantılar için bağlam sağla" bölümünü (Önemli parçaları alıntılayın)
Gert van den Berg


0

Ben naçizane reklam vermek istedikleri benim son yayın arasında taveya textattr ekleyerek rengi hale getirmeyi amaçlar ve ANSI çıkış kodları içine insanlar tarafından okunabilir özelliklerini çevirerek programınızın terminal çıkışı daha kolay güzelleştirme niteliklerini bir kütüphane ve komut satırı aracı.

Örneğin:

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

veya daha da kısa:

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

veya bir alternatif:

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

Size şöyle bir şey verecek:

görüntü tanımını buraya girin

Şu anda bu kütüphane, C, C ++, D ve Python dillerinde, en sevdiğiniz kabuğundan komut satırı kullanımının dışında kullanılabilir.

Diğer programların çıktılarını otomatik olarak renklendirmediğini unutmayın. Abstruse kodlarını hatırlamak zorunda kalmamanızda size yardımcı olacak bir yardımcı programdır. Yalnızca belirgin renk adlarını veya bunların hatırlanması kolay rgb cmyk w (hite) (/) f kısaltmalarını kullanmanız gerekir.

Daha fazla ayrıntı için textattr deposunu ziyaret edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.