अपने टर्मिनल और शेल वातावरण को रंगीन करना?


262

मैं अपना अधिकांश समय यूनिक्स वातावरण में काम करने और टर्मिनल एमुलेटर का उपयोग करने में बिताता हूं। मैं कमांड लाइन पर रंग का उपयोग करने की कोशिश करता हूं, क्योंकि रंग आउटपुट को अधिक उपयोगी और सहज बनाता है।

मेरे टर्मिनल परिवेश में रंग जोड़ने के लिए क्या विकल्प मौजूद हैं? आप किन ट्रिक का इस्तेमाल करते हैं? आपको क्या नुकसान हुआ है?

दुर्भाग्य से, रंग के लिए समर्थन टर्मिनल प्रकार, OS, TERM सेटिंग, उपयोगिता, छोटी गाड़ी कार्यान्वयन आदि के आधार पर भिन्न होता है।

प्रयोग के बाद, मेरे सेटअप के कुछ सुझाव यहां दिए गए हैं:

  1. मैं सेट करता हूं TERM=xterm-color, जो ज्यादातर मेजबानों (लेकिन सभी नहीं) पर समर्थित है।
  2. मैं कई अलग-अलग मेजबानों, विभिन्न ओएस संस्करणों आदि पर काम करता हूं। मैं macOS X, Ubuntu Linux, RHEL / CentOS / वैज्ञानिक लिनक्स और FreeBSD से सब कुछ उपयोग करता हूं। यदि संभव हो तो मैं चीजों को सरल और सामान्य रखने की कोशिश कर रहा हूं।
  3. मैं जीएनयू का उपयोग करके काम का एक गुच्छा करता हूं screen, जो मस्ती की एक और परत जोड़ता है।
  4. कई OS dircolors, डिफ़ॉल्ट रूप से और जैसी चीज़ें सेट करते हैं , और मैं इसे सौ अलग-अलग होस्ट पर संशोधित नहीं करना चाहता। इसलिए मैं डिफॉल्ट्स के साथ चिपके रहने की कोशिश करता हूं। इसके बजाय, मैंने अपने टर्मिनल के रंग विन्यास को ट्विक किया।
  5. कुछ के लिए रंग का प्रयोग करें यूनिक्स कमांड ( ls, grep, less, vim) और बैश शीघ्र । ये कमांड मानक " ANSI एस्केप सीक्वेंस " का उपयोग करते हैं । उदाहरण के लिए:

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

मैं अपना पोस्ट करूंगा .bashrcऔर अपने खुद के सवाल का जवाब दूंगा।


f मेरा मेरा दृष्टिकोण (नीचे उत्तर देखें) OSX और लिनक्स अंतर के साथ मुद्दों को संबोधित करता है, उदाहरण के लिए एक पर रंग ls -G है और दूसरे पर ls है --color-auto
माइकल डुरंट

1
क्या किसी ने स्तंभों को रंगने के लिए एक उपकरण देखा? वह एक है column -t --color?
टॉमस पोस्पेशिक

जवाबों:


121

यहाँ कुछ चीजें हैं जो आप कर सकते हैं:

संपादकों + कोड संपादकों का
एक बहुत कुछ सिंटैक्स हाइलाइटिंग समर्थन है। vimऔर emacsयह डिफ़ॉल्ट रूप से है। आप इसे भी सक्षमnano कर सकते हैं ।

आप कमांड-लाइन टूल के रूप में पाइलेशन का उपयोग करके टर्मिनल पर सिंटैक्स हाइलाइट कोड भी कर सकते हैं ।

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 (शेल प्रॉम्प्ट) सेट कर सकते हैं। उदाहरण के लिए:

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

जैसे PS1 का उत्पादन करेगा:

[पीला] लुकास @ ubuntu: [लाल] ~ [सामान्य] $

आप वास्तव में इसके साथ रचनात्मक प्राप्त कर सकते हैं। एक विचार के रूप में:

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

अपने टर्मिनल के शीर्ष पर कुछ यादृच्छिक जानकारी के साथ एक बार डालता है। (सर्वोत्तम परिणामों के लिए, भी उपयोग करें alias clear="echo -e '\e[2J\n\n'"।)

एस्केप सीक्वेंस से छुटकारा पाना

यदि कोई चीज रंग जमा रही है जब आप इसे नहीं चाहते हैं, तो मैं इस sedलाइन का उपयोग पलायन अनुक्रमों को हटाने के लिए करता हूं :

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

यदि आप अधिक प्रामाणिक अनुभव चाहते हैं, तो आप उन पंक्तियों से भी छुटकारा पा सकते हैं \e[8m, जो पाठ को छिपाने के लिए टर्मिनल को निर्देश देते हैं। (व्यापक रूप से समर्थित नहीं है।)

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

यह भी ध्यान दें कि उन ^ [वास्तविक होना चाहिए, शाब्दिक ^ [s। आप उन्हें 'V ^ [को bash में दबाकर टाइप कर सकते हैं, वह है Ctrl+ V, Ctrl+ [


1
पहली PS1 लाइन को इस तरह पढ़ना चाहिए PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ ':। चौथे बैकस्लैश के बाद एक शानदार एक्स है।
क्रिस

3
एस्केप को \[...\]दूसरी पंक्ति में संलग्न किया जाना चाहिए या पहली पंक्ति को अधिलेखित कर देगा। PS1 = '[\ e [33; 1m] \ u @ \ h: [\ e [31m] \ W \ e [0m \ $'
yanglifu90

ls --color=alwaysकाम नहीं करता। @ मिचेल डुरंट का दृष्टिकोण इसके लिए बेहतर है:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
साइमन सी।

83

मैं भी उपयोग करता हूं:

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) मेरे ~ / sbin में एक पायथन स्क्रिप्ट को बुला रहा है जो वर्तमान पथ के बारे में संस्करण नियंत्रण जानकारी प्रिंट करता है। इसमें Mercurial, Git, Svn, Cvs, आदि का समर्थन शामिल है। स्क्रिप्ट के लेखक के यहाँ स्रोत है

बैश प्रॉम्प्ट स्क्रीनशॉट

यह मेरे त्वरित कॉन्फ़िगरेशन का पूर्ण स्रोत है:


जब मैं उपरोक्त PS1 का उपयोग करता हूं तो मुझे एक लाइन समस्या के समाधान के लिए यहां देखें: stackoverflow.com/questions/5087036/…
Xander Dunn

मैंने प्रांप्ट में रंगों के लिए बची हुई कोष्ठक को प्रतिबिंबित करने के लिए उत्तर अपडेट किया है। धन्यवाद!
क्रिश

1
$LSCOLORSऔर $CLICOLORबीएसडी के लिए हैं। GNU ls (लिनक्स) $LS_COLORSएक अलग सिंटैक्स के साथ उपयोग करता है । जैसा कि जीएनयू मुझे घर जैसा लगता है, मैं LSCOLORS=exgxfxDacxBaBaCaCaeaEaबीएसडी पर जीएनयू के रंगों की नकल करता हूं ।
एडम काट्ज

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
स्टीवन अल्मरोथ

1
.bashrcप्रभावी होने के लिए आपको फ़ाइल को स्रोत करने की आवश्यकता हो सकती है । आप इसे निम्न आदेश के साथ कर सकते हैं। source /path/to/.bashrc
फ्रैंकोइस

18

grepऔर lsपहले से ही उल्लेख किया गया है, यदि आप एक बहुत अधिक रंग की जाँच चाहते हैं जेनेरिक Coloriser , अपनी प्रारंभिक उद्देश्य लॉगफ़ाइल colorize करने के लिए गया था, लेकिन शानदार तरीके से यह भी colorizes ping, traceroute, gcc, make, netstat, diff, last, ldap, और cvs

यदि आप रीगेक्स जानते हैं तो इसे आसानी से बढ़ाया जा सकता है। मैंने सूची में psऔर जोड़ दिया है nmap(यदि आप में आते हैं, तो grcमुझे उन दो उपकरणों के लिए .conf फ़ाइलों को साझा करने में अधिक खुशी होगी)

(Btw, यह के माध्यम से स्थापित करने के लिए synaptic, pacmanऔर एक जैसे आप "GRC" के लिए खोज बेहतर भाग्य हो सकता है)


grcअब psडिफ़ॉल्ट रूप से समर्थन करता है। मुझे आपकी nmapरंगाई में दिलचस्पी होगी । इन सभी को एक तरह से अलियास करने के लिए मेरा जवाब भी देखें, जब आप grc को अपग्रेड करते हैं, तो नए कमांड को अवशोषित करेंगे।
एडम काट्ज

मैंने गौर किया। यहाँ मेरा conf.nmap (और बाकी सब कुछ, वास्तव में) gist.github.com/sygo/844982#file-conf-nmap - मैंने देखा कि आप infosec में काम करते हैं, आपको conf.hexdump दिलचस्प लग सकता है, मैंने इसे अभी तक पूरा नहीं किया है हालांकि।
21

धन्यवाद @ स्येगो। मैंने कांटा चुभाया है और आपके जिस्ट को संशोधित किया है। मैंने वास्तव में जीआईटी के साथ डेटा कभी प्रतिबद्ध नहीं किया है (अकेले गीथूब के जिस्ट को छोड़ दें) और मैं यह पता नहीं लगा सकता कि इसे कैसे वापस मर्ज करना है।
एडम काटज़

मुझे संदेह है कि आप ऐसा नहीं कर सकते क्योंकि यह एक उचित विकल्प नहीं है। हालांकि मैंने आपके कांटे की जांच की और मैं निश्चित रूप से आपके संस्करण को जा रहा हूं। मैं उत्सुक हूँ कि क्या हेक्स डंप एक में बदल जाएगा ...
Sygo

11

मैंने अपने .bashrc को OSX और Ubuntu दोनों पर काम करने के लिए वर्षों से सम्मानित किया है।
मैंने इसे कॉम्पैक्ट कंडीशन स्टेटमेंट्स के साथ आकार में 28 लाइनों तक घटा दिया है।
इसके साथ, मेरा PS1 प्रॉम्प्ट दिखता है: यहां छवि विवरण दर्ज करें

लाल रंग में समय, हरे रंग में उपयोगकर्ता नाम, हल्के नीले रंग में मशीन का नाम, गहरे नीले रंग में pwd और पीले रंग में गिट शाखा।

मेरी PS1 संकेत की सुविधा:

  • git शाखा दिखाता है!
  • लंबी निर्देशिका पथ (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'

1
lsओएस एक्स पर रंग उपलब्ध हैं , लेकिन इसका उपयोग करके किया जाता है export CLICOLOR=1
थॉमस डब्ल्यू

3
@ThomasW नहीं बल्कि linux पर :- p लड़का दोनों का उपयोग करता है।
जिम्मी केन

1
बहरहाल, थॉमसडब्ल्यू यह बताने के लिए सही है कि जवाब यह कहने में गलत है कि रंग मैकओएस ls10 पर उपलब्ध नहीं हैं । इसका जवाब भी गलत है कि यहां के संकेत वास्तव में गलत हैं। वे सही ढंग से संतुलन\[\] नहीं रखते हैं और , और इस जवाब को कॉपी करने वाले कम से कम एक व्यक्ति के लिए समस्याएं पैदा कर दी हैं
JdeBP

9

मैन पेज के लिए रंग ( अधिक विवरण ):

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 -; }

ग्रीप के लिए रंग ( 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 "$@"; 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( सामान्य 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 "$@"
  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
}

के लिए रंग अंतर : एक समारोह के लिए बहुत अधिक सामग्री, एक स्क्रिप्ट और यह उर्फ अपने आर सी फाइल में (अनावश्यक यदि आप स्थापित का उपयोग 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;

रंग शीघ्र के लिए :

# 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

बैश प्रॉम्प्ट का डेमो


1
एक स्क्रीनशॉट के लिए अपवोट
ग्रीन

मेरा PSWD()कार्य POSIX- संगत हुआ करता था, लेकिन यह इतना आसान है कि bash / zsh सबस्ट्रिंग हैंडलिंग का उपयोग करना आसान हो गया। POSIX संस्करण के लिए संशोधन 6 देखें , जिसमें बहुत सारे प्रश्न चिह्न शामिल हैं और टर्मिनल चौड़ाई के अनुकूल नहीं थे। मैंने स्क्रीनशॉट को अपडेट नहीं किया, लेकिन यह केवल 80 कैरेक्टर की चौड़ाई पर थोड़ा बदलाव है।
एडम काट्ज

CLICOLOR=1मेरे लिए फ्रीबीएसडी 11.2 के साथ काम नहीं करता है
साइमन सी। 6

1
@SimonC। - आप बीएसडी के बजाय अपने फ्रीबीएसडी सिस्टम पर जीएनयू उपयोगिताओं का उपयोग कर सकते हैं। बीएसडी ( पुराने बीएसडी पर) का उपयोग CLICOLOR=1 lsकरने के समान कार्य करना चाहिए । यदि काम करता है (कोई त्रुटि नहीं), तो आप GNU की कमांड का उपयोग कर रहे हैं और इसे अनदेखा कर रहे हैं। ls -Gls -gls --colorls$CLICOLOR
एडम काट्ज

1
@SimonC। - आपको वास्तव में ~/.bashrcप्रभावी होने के लिए किसी भी परिवर्तन के लिए अपने लोड करना होगा। या तो source ~/.bashrcनया बैश सत्र चलाएं या शुरू करें (टर्मिनल या रन लॉन्च करें bash)।
एडम काट्ज

8

एक बोल्ड / रंगीन प्रॉम्प्ट सेट करें। से 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="\u@\[$bold\]\h\[$reset\]:\w \$ "

मैं रंग सेटिंग्स को खोजने में कामयाब रहा हूं, जो व्यापक रूप से समर्थित हैं, और जो पुराने वातावरण (यहां तक ​​कि FreeBSD4!) में gobbledygook वर्णों को प्रिंट नहीं करते हैं, और अगर TERM = vt100, xterm, xterm- रंग ठीक काम करने लगता है। (अधिकाँश समय के लिए)। मेरी .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

1
या यदि आप ZSH का उपयोग करना चाहते हैं, तो aperiodic.net/phil/prompt पर Phil Gold का संकेत देना कला का एक काम है।
tsvallender


5

चीजें जो पहले से ही यहाँ नहीं कही गई हैं:

अपने संकलनों के उत्पादन को gcc के साथ तैयार करने के लिए, जोहान्स श्लुटर द्वारा कलरगॉक है

लॉग को रंगीन करने के लिए, मल्टीटैल है

किसी भी स्टडआउट को रंग देने के लिए, मैं एक साथ xcol डालता हूं

xcol का उदाहरण

मैं व्यक्तिगत रूप से 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}"

मैं भी इस छोटे से समारोह की तरह रंग इको (ढेर अतिप्रवाह पर पाया)

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

क्षमा करें, अधिक लिंक पोस्ट करने की अनुमति नहीं है


2
नमस्ते, आप झंडे कैसे बनाते हैं, शीघ्र पथ के लिए? मैं त्रिभुज के साथ आयताकार सलाखों का उल्लेख कर रहा हूं धन्यवाद
Artur Vieira

यह एक ubuntu gnu टर्मिनल में भी काम करता है?
हेल

lnav भी रंगारंग लॉगफाइल्स दिखाने के लिए एक महान उपकरण है
सिरिल चैबिसो

4

मेरा सुझाव है कि आप ZSH और इसके प्लगइन ओह-माय-zsh की जांच करें जिसमें सबसे शक्तिशाली कंसोल विशेषताएं हैं जो मैंने देखीं। उनमें से एक आपके टर्मिनल के लिए थीम चुन रहा है। यह मेरे विषय का उदाहरण है ... छोटे रंगों में रंग उतने गर्म नहीं होते हैं, लेकिन वे इस चित्र के समान हैं ... किसी भी तरह से आप इसे पसंद करेंगे!

यहां छवि विवरण दर्ज करें


2
अगर मैं कर सकता था, तो मैं ओह-माय-जेडएसएच सुझाव के लिए इसे डाउनवोट करूंगा। एक सिस्टम इंजीनियर के रूप में, जो टर्मिनल में बड़े पैमाने पर काम करता है, और किसी ऐसे व्यक्ति के रूप में, जिसने अपने वर्कफ़्लो में zsh / oh-my-zsh को अपनाने की कोशिश की, मैं ईमानदारी से कह सकता हूं कि मैं कभी भी ZSH को किसी भी तरह की सिफारिश नहीं करूंगा। निश्चित रूप से, आप किसी अन्य शेल के नाम से एक फ़ाइल में zsh को सिमल कर सकते हैं और उस शेल का अनुकरण कर सकते हैं, लेकिन जब आप ऐसा करते हैं तो वह आपके .bashrc, .bash_profile, आदि को नहीं पढ़ता है। इसके अलावा, आप emulate bashअपने .zprofile या। Zshrc में नहीं डाल सकते । फ़ाइलें। किसी के लिए जो BASH में उन्नत सुविधाओं के साथ काम करता है, कई सूक्ष्मताएं हैं जो आपको काटेंगी। BASH एक बेहतर शे है।
चार्ल्स अदीस

2
केवल वही चीज जो ज़ैस के बॉक्स से बाहर है जो BASH से बेहतर है कमांड को पूरा करना है, लेकिन यहां तक ​​कि BASH में प्रोग्राम करने योग्य भी है। हो सकता है कि कभी-कभी सांसारिक कार्यों को छोड़कर जो व्यक्ति शेल का उपयोग नहीं करता है, उसे ZSH को अपनाना चाहिए, लेकिन यह किसी ऐसे व्यक्ति के लिए नहीं है जिसे शेल का बड़े पैमाने पर उपयोग करने की आवश्यकता है। =~ऑपरेटर आप, जिस तरह से ZSH संभालती सरणियों, आप काट सकते हैं आदि के बारे में 9 महीने मैं इसके बारे में बहुत हो गया के लिए ZSH / ओह-मेरी-ZSH इस्तेमाल करने के बाद काट कर सकते हैं। मैं एक कस्टम थीम का उपयोग कर रहा था जिसे मैंने खुद लिखा था, मैंने इसे BASH में पोर्ट किया और अपनी खुद की गिट प्रांप्टलाइन लिखी और मैंने कभी पीछे मुड़कर नहीं देखा। अब मुझे पोर्टेबिलिटी के बारे में चिंता नहीं है
चार्ल्स अदीस

1
"इसमें सबसे शक्तिशाली कंसोल विशेषताएं हैं जो मैंने देखीं। उनमें से एक आपके टर्मिनल के लिए थीम चुन रही है।"
जोनाथन हार्टले

@JonathanHartley, आपकी टिप्पणी ऐसी लगती है जैसे आपने उसे अधूरा छोड़ दिया। ?
वाइल्डकार्ड

2
आपकी चिंता के लिए धन्यवाद, लेकिन मेरी टिप्पणी वह सब कुछ कहती है जो मैंने कहने का इरादा किया था।
जोनाथन हार्टले

4

रंग में अलग आउटपुट देखने के लिए, कोलोर्डिफ़ का उपयोग करें ।

sudo apt-get install colordiff

Colordiff में किसी भी फॉर्मेट-आउटपुट को पाइप करें:

कोलोर्डिफ़ में पाईप के पृथक उत्पादन

इसमें कुछ अलग-अलग वैकल्पिक प्रारूप शामिल हैं, जैसे -y(साइड-बाय-साइड)।

वैकल्पिक रूप से, अगर स्टैंडअलोन (बिना किसी चीज के इसमें डाला जाता है) तो यह 'डिफरेंशियल' के आसपास एक आवरण का काम करता है, और आउटपुट को रंग देता है। इसलिए मेरे पास यह है कि मेरे।

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

1
.bashrcउदाहरण के अंतिम याद आ रही है fi:, और एक एकल लाइन आदेश करने के लिए परिवर्तित किया जा सकता हैtype colordiff &> /dev/null && alias diff='colordiff'
तीमू Leisti

3

रूट और गैर-रूट शेल के बीच आसानी से अंतर करने के लिए कुछ टेक्स्ट सजावट (बोल्ड)। Zsh के लिए:

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

बैश के लिए:

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

कृपया अपना शेल निर्दिष्ट करें। सवाल केवल खोल विशिष्ट टैग है बैश , लेकिन मुझे लगता है कि अपने कोड नहीं है bash
मैनटवर्क

@manatwork: क्षमा करें, यह उल्लेख करना भूल गया कि यह Zsh था। मेरी पोस्ट अपडेट की गई।
मिशा आरिफाइव

3

मैं बस एक ही बात सोच रहा था। मेरा अपना दृष्टिकोण है, लेकिन मैं विकल्पों की तलाश कर रहा हूं।

मैं प्रोग्राम कॉल के आसपास बैश रैपर लिखता हूं और उनके आउटपुट को पाइप करता हूं 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} $@ | 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

प्रॉम्प्ट सेट करने के लिए, मेरे पास मेरी .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

यह मुझे एक संकेत देता है जो कुछ इस तरह दिखता है:

user@host(bash): ~/bin >

काम करने वाली निर्देशिका हरे रंग में है। और उपयोगकर्ता नाम बोल्ड और सियान है जब तक कि मैं उस शैल के साथ नहीं चला sudo, जिस स्थिति में उपयोगकर्ता नाम ("रूट") बोल्ड और लाल प्रदर्शित होता है।

मुझे व्यक्तिगत रूप से चर में संग्रहीत फ़ॉर्मेटिंग नियंत्रण वर्ण होना पसंद है क्योंकि यह शीघ्रता से सेटिंग करने के लिए कोड को पढ़ना आसान बनाता है। यह प्रॉम्प्ट को संपादित करना भी बहुत आसान बनाता है।

इसका उपयोग करने का कारण tputयह है कि यह अजीब 033[01;31m\]दृश्यों की तुलना में अधिक सार्वभौमिक रूप से समर्थित माना जाता है । इसके अलावा, एक अतिरिक्त बोनस के रूप में, यदि आप echo $PS1प्रॉम्प्ट पर करते हैं, तो आप उन अनजाने नियंत्रण दृश्यों के बजाय रंगों के साथ कच्चे प्रॉम्प्ट देखेंगे ।


2

आप एक प्रोजेक्ट की कोशिश कर सकते हैं जो स्क्रिप्ट आउटपुट को रंगीन करने में मदद करता है, इसका नाम ScriptEchoColor for source फोर्ज: 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

स्वचालित रंग विन्यास योग्य हैं।

यह इसके साथ किया गया एक उदाहरण है: यहां छवि विवरण दर्ज करें


2

आदेशों के उत्पादन को रंगीन करने के लिए एक महान सामान्य-उद्देश्य पायथन उपकरण ' कॉलआउट ' है

आप इसे एन समूहों के साथ एक रेगेक्स देते हैं, इसके बाद एन रंगों की अल्पविराम से अलग की गई सूची है। समूह से मेल खाने वाला कोई भी पाठ संबंधित रंग में प्रदर्शित किया जाएगा।

उदाहरण के लिए, यदि आप कुछ परीक्षण आउटपुट देख रहे हैं:

python -m unittest discover -v

कुछ पायथन unittests का अनकवर्ड आउटपुट

तो आप इसके साथ सज सकते हैं:

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

कुछ पायथन unittests के रंगीन उत्पादन

देखें कि मेरे रेगेक्स के तीन समूह (कोष्ठक) हैं जिसके बाद तीन रंग हैं (और वैकल्पिक रूप से तीन शैलियों, लेकिन मैंने सभी रंगों को 'बोल्ड' पर सेट करने के लिए एक शॉर्टहैंड का उपयोग किया है, इसलिए 'ब्लैक' समूह, जो ब्रैकेट में पाठ से मेल खाता है , गहरे भूरे रंग के रूप में सामने आता है।)

यह भी ध्यान दें कि मुझे 2>&1पायथन के आह्वान के अंत में कैसे जोड़ना था , क्योंकि unittest का उत्पादन stderr पर है, इसलिए मैंने इसे stdout में स्थानांतरित कर दिया ताकि मैं इसे colout में पाइप कर सकूं।

यह आमतौर पर उपयोग करने के लिए इतना आसान है कि मैं अक्सर खुद को नए-नए कॉलआउट इन-द-फ्लाई का निर्माण करता हूं, और अपने कमांड-लाइन इतिहास से उन्हें पुन: उपयोग या संशोधित करता हूं।

इसका केवल नकारात्मक पक्ष यह है कि यह पायथन पैकेज के रूप में आता है, एक स्टैंडअलोन निष्पादन योग्य नहीं है, इसलिए आपको इसे पाइप, या का उपयोग करके स्थापित करने की आवश्यकता है sudo python setup.py install



1

मैं कलर रैपर का इस्तेमाल करता हूं ।

जीएनयू / लिनक्स पर सामान्य यूनिक्स-आधारित आदेशों के लिए cw एक गैर-घुसपैठ वास्तविक समय ANSI रंग आवरण है। cw को निष्पादित किए जा रहे आदेशों के वातावरण को अनुकरण करने के लिए डिज़ाइन किया गया है, ताकि यदि कोई व्यक्ति अपने शेल में 'du', 'df', 'ping' आदि टाइप करे, तो यह एक परिभाषा के अनुसार वास्तविक समय में आउटपुट को स्वचालित रूप से रंग देगा। रंग स्वरूप वांछित फ़ाइल। cw के पास वाइल्डकार्ड मैच कलरिंग, टोकेनाइज्ड कलरिंग, हेडर्स / फुटर्स, केस लैंडस्केप कलरिंग, कमांड लाइन डिपेंडेंट डेफिनिशन कलरिंग के लिए सपोर्ट है और इसमें 50 से अधिक प्री-मेड डेफिनिशन फाइल्स शामिल हैं।

यह लगभग निर्बाध है, लेकिन एक बार मैंने पाया कि पीएस इन इंटरैक्टिव शेल एक पाइप में पीएस की तुलना में अलग-अलग आउटपुट देता है।



0

यदि आप vimमेरी तरह ही अपना रंग बनाना चाहते हैं, तो मैं आपको दो चरणों का पालन करने का सुझाव देता हूं:

  1. इस लिंक का अनुसरण करके सुविधा को चालू करना सीखें: vi या vim में हाइलाइटिंग रंग सिंटैक्स चालू करें

लिंक में प्रमुख चरण:

  1. कमांड टाइप करके ~ / .vimrc फाइल को एडिट करें: vi ~ / .vimrc

  2. निम्न विकल्प जोड़ें: सिंटैक्स ऑन

  3. फ़ाइल को सहेजें और बंद करें

  4. Vim कमांड चलाकर इसका परीक्षण करें: vim foo.sh

  1. अपनी पसंद की रंग योजना ढूंढें और उसका उपयोग करें। जिस योजना का मैं उपयोग करता हूं: वह योजना जिसका मैं उपयोग कर रहा हूं

बाहरी स्रोत के लिंक का उपयोग करते समय, आपको गाइड के प्रासंगिक भाग के "लिंक के लिए संदर्भ प्रदान करें" भाग (उद्धरण महत्वपूर्ण भाग) की जांच करनी चाहिए: unix.stackexchange.com/help/how-to-answer
Gert van den Berg


0

मैं विनम्रतापूर्वक विज्ञापन करना चाहते हैं मेरी हाल ही में प्रकाशन की taया textattr बताया रंग बनाने के लिए करना है और अपने कार्यक्रम के टर्मिनल उत्पादन एएनएसआई मुक्ति कोड में मानव पठनीय चश्मा अनुवाद द्वारा आसान सुशोभित करने का श्रेय है कि एक पुस्तकालय और कमांड लाइन उपकरण।

उदाहरण के लिए:

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"

आपको कुछ इस तरह देगा:

यहां छवि विवरण दर्ज करें

वर्तमान में यह लाइब्रेरी चार भाषाओं सी, सी ++, डी और पायथन से अलग है जो आपके पसंदीदा शेल से कमांडलाइन उपयोग के अलावा है।

ध्यान दें कि यह स्वचालित रूप से किसी भी अन्य कार्यक्रमों के उत्पादन को कम नहीं करता है। यह बल्कि यूटिलिटी कोड्स को याद न रखने में आपकी मदद करने की एक उपयोगिता है। आपको केवल स्पष्ट रंग नामों या उनके आसान-से-याद करने वाले rgb cmyk w (hite) (f) के संक्षिप्ताक्षरों का उपयोग करने की आवश्यकता है।

अधिक जानकारी के लिए textattr रेपो पर जाएँ ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.