it-swarm-vi.com

Tô màu thiết bị đầu cuối và môi trường Shell của bạn?

Tôi dành phần lớn thời gian làm việc trong môi trường Unix và sử dụng trình giả lập thiết bị đầu cuối. Tôi cố gắng sử dụng màu trên dòng lệnh, vì màu sắc làm cho đầu ra hữu ích và trực quan hơn.

Những tùy chọn tồn tại để thêm màu sắc vào môi trường thiết bị đầu cuối của tôi? Bạn dùng thủ thuật gì? Những cạm bẫy bạn đã gặp phải?

Thật không may, hỗ trợ cho màu sắc khác nhau tùy thuộc vào loại thiết bị đầu cuối, hệ điều hành, cài đặt TERM, tiện ích, triển khai lỗi, v.v.

Dưới đây là một số mẹo từ thiết lập của tôi, sau rất nhiều thử nghiệm:

  1. Tôi có xu hướng đặt TERM=xterm-color, Được hỗ trợ trên hầu hết các máy chủ (nhưng không phải tất cả).
  2. Tôi làm việc trên một số máy chủ khác nhau, các phiên bản HĐH khác nhau, v.v. Tôi sử dụng mọi thứ từ macOS X, Ubuntu Linux, RHEL/CentOS/Khoa học Linux và FreeBSD. Tôi đang cố giữ mọi thứ đơn giản và chung chung, nếu có thể.
  3. Tôi thực hiện một loạt công việc bằng cách sử dụng GNU screen, thêm một lớp thú vị khác.
  4. Nhiều hệ điều hành đặt các thứ như dircolors và theo mặc định, và tôi không muốn sửa đổi điều này trên một trăm máy chủ khác nhau. Vì vậy, tôi cố gắng gắn bó với các mặc định. Thay vào đó, tôi tinh chỉnh cấu hình màu của thiết bị đầu cuối của tôi.
  5. Sử dụng màu cho một số lệnh Unix (ls, grep, less, vim) và Bash Prompt . Các lệnh này dường như sử dụng tiêu chuẩn " chuỗi thoát ANSI ". Ví dụ:

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

Tôi sẽ đăng .bashrc Và trả lời câu hỏi của riêng tôi Phong cách nguy hiểm.

267
Stefan Lasiewski

Dưới đây là một vài điều bạn có thể làm:

Biên tập viên + Mã
[.__.] Rất nhiều trình soạn thảo có hỗ trợ tô sáng cú pháp. vimemacs mặc định bật nó lên. Bạn cũng có thể bật nó dưới nano .

Bạn cũng có thể cú pháp tô sáng mã trên thiết bị đầu cuối bằng cách sử dụng Pygments làm công cụ dòng lệnh.

grep
[.__.] grep --color=auto nổi bật tất cả các trận đấu. Bạn cũng có thể dùng export GREP_OPTIONS='--color=auto' để làm cho nó bền bỉ mà không có bí danh. Nếu bạn dùng --color=always, nó sẽ sử dụng màu ngay cả khi đường ống , làm cho mọi thứ bị lẫn lộn.

ls

ls --color=always

Màu sắc được chỉ định bởi:

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

(gợi ý: dircolors có thể hữu ích)

PS1
[.___.] Bạn có thể đặt PS1 (Shell Prompt) để sử dụng màu sắc. Ví dụ:

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

Sẽ tạo ra một PS1 như:

[vàng] lucas @ ubfox: [đỏ] ~ [bình thường] $

Bạn có thể thực sự sáng tạo với điều này. Như một ý tưởng:

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

Đặt một thanh ở đầu thiết bị đầu cuối của bạn với một số thông tin ngẫu nhiên. (Để có kết quả tốt nhất, cũng sử dụng alias clear="echo -e '\e[2J\n\n'".)

Thoát khỏi chuỗi thoát

Nếu có thứ gì đó bị kẹt khi xuất màu khi bạn không muốn, tôi sử dụng dòng sed này để loại bỏ các chuỗi thoát:

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

Nếu bạn muốn có trải nghiệm chân thực hơn, bạn cũng có thể thoát khỏi các dòng bắt đầu bằng \e[8m, hướng dẫn thiết bị đầu cuối ẩn văn bản. (Không được hỗ trợ rộng rãi.)

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

Cũng lưu ý rằng những ^ [s nên là thực tế, nghĩa đen ^ [s. Bạn có thể nhập chúng bằng cách nhấn ^ V ^ [trong bash, nghĩa là Ctrl + VCtrl + [.

123
Lucas Jones

Tôi cũng dùng:

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

Và nếu bạn thích tô màu Lời nhắc của mình, các lọ màu được xác định có thể hữu ích:

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'

Và sau đó Lời nhắc của tôi là một cái gì đó như thế này:

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) đang gọi a python script trong my ~/sbin in thông tin kiểm soát phiên bản về đường dẫn hiện tại. Nó bao gồm hỗ trợ cho Mercurial, Git, Svn, Cvs, v.v. tập lệnh có nguồn ở đây .

Bash Prompt screenshot

Đây là nguồn đầy đủ trong cấu hình Prompt của tôi:

86
Kris

grepls đã được đề cập, nếu bạn muốn có nhiều màu sắc hơn hãy kiểm tra Generic Coloriser , mục đích ban đầu của nó là tô màu các logfiles, nhưng ngay lập tức hộp nó cũng tô màu ping, traceroute, gcc, make, netstat, diff, last, ldapcvs.

Nó dễ dàng mở rộng nếu bạn biết regexes. Tôi đã thêm psnmap vào danh sách (nếu bạn vào grc Tôi sẽ rất vui mừng khi chia sẻ các tệp .conf cho hai công cụ đó)

(Btw, để cài đặt nó qua synaptic, pacman, và giống như bạn có thể gặp may mắn hơn khi tìm kiếm "grc")

18
Sygo

Tôi đã mài giũa .bashrc của mình trong nhiều năm để hoạt động trên cả OSX và Ubuntu.
[.__.] Tôi cũng đã giảm kích thước xuống còn 28 dòng với các câu lệnh điều kiện nhỏ gọn.
[.__.] Với nó, Lời nhắc PS1 của tôi trông như: enter image description here

với thời gian màu đỏ, tên người dùng màu xanh lá cây, tên máy màu xanh lam nhạt, pwd màu xanh đậm hơn và nhánh git màu vàng.

Tính năng của PS1 Prompt của tôi:

  • cho thấy chi nhánh git!
  • đường dẫn thư mục dài (hơn 6 phần tử) được 'cắt xén' để hiển thị 3 thư mục trên cùng và 3 dưới cùng với _ giữa lúc đó (đó là phần pwd sed của VỊ TRÍ).
  • cỗ xe trở về ở cuối để Prompt luôn ở bên trái!

Các dòng có liên quan từ tệp .bashrc Của tôi là:

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\]>'

Đối với ls có màu khi có sẵn và không có lỗi khi không (ví dụ: OSX):

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

Màu sắc cho trang man ( chi tiết hơn ):

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

Màu sắc cho grep (1;32 là màu xanh lá cây tươi sáng, xem các bài viết khác ở đây để biết các màu khác):

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'

Nhiều màu sắc hơn cho 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

Cài đặt grc ( Colouriser chung ) và thêm nó vào bí danh của bạn:

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

Màu sắc cho diff : Quá nhiều nội dung cho một chức năng, sử dụng tập lệnh và bí danh trong tệp RC của bạn (không cần thiết nếu bạn đã cài đặt 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;

Màu sắc cho bash Nhắc :

# 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

Đặt một dấu nhắc đậm/màu. Từ cyberciti.bizBashFAQ

# '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 \$ "

Tôi cũng đã tìm được các cài đặt màu được hỗ trợ rộng rãi và không in các ký tự gobbledygook trong các môi trường cũ hơn (thậm chí FreeBSD4!) Và dường như hoạt động tốt nếu TERM = vt100, xterm, xterm-color. (Phần lớn). Từ .bashrc của tôi:

# 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

Có một công cụ tốt để thiết lập màu sắc của bạn cho lệnh ls - http://geoff.greer.fm/lscolors/

5
Rob Cowell

Những điều chưa được nói đã ở đây:

Để tô màu đầu ra của các phần tổng hợp của bạn với gcc, có colorgcc của Johannes Schlüter

Để tô màu các bản ghi, có nhiều

Để tô màu bất kỳ thiết bị xuất chuẩn nào, tôi ghép lại xcol

xcol example

Cá nhân tôi sử dụng chúng từ công cụ 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

Tôi sử dụng các biến này trong các kịch bản của tôi như vậy

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

Tôi cũng thích chức năng nhỏ này colorEcho (tìm thấy trên 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

Xin lỗi, không được phép đăng thêm liên kết

5
nachoparker

Tôi khuyên bạn nên kiểm tra ZSH và plugin của nó oh-my-zsh có một trong những tính năng điều khiển mạnh mẽ nhất mà tôi thấy . Một trong số đó là chọn chủ đề cho thiết bị đầu cuối của bạn. Đây là ví dụ về chủ đề của tôi ... Trong tty màu sắc không quá ấm áp nhưng chúng giống như trong bức tranh này ... Bất kỳ cách nào bạn sẽ thích nó!

enter image description here

4
user92622

Để xem đầu ra khác màu, sử dụng colordiff .

Sudo apt-get install colordiff

Đưa bất kỳ đầu ra định dạng khác vào colordiff:

output of diff piped into colordiff

Điều này bao gồm một số định dạng thay thế của diff, như -y (cạnh bên nhau.)

Ngoài ra, nếu được gọi độc lập (không có bất kỳ thứ gì được đưa vào) thì nó hoạt động như một trình bao bọc xung quanh 'diff' và tô màu đầu ra. Do đó, tôi có cái này trong .bashrc, với bí danh 'diff' cho colordiff.

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

Để thiết lập Lời nhắc, tôi có tệp này trong tệp .bashrc của mình.

#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

Điều này mang lại cho tôi một Lời nhắc trông giống như thế này:

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

Thư mục làm việc có màu xanh lá cây. Và tên người dùng được in đậm và màu lục lam trừ khi tôi chạy Shell với Sudo, trong trường hợp đó, tên người dùng ("root") hiển thị đậm và đỏ.

Cá nhân tôi thực sự thích có các ký tự điều khiển định dạng được lưu trữ trong các biến vì nó giúp đọc mã để thiết lập Lời nhắc dễ dàng hơn. Nó cũng làm cho việc chỉnh sửa Prompt dễ dàng hơn nhiều .

Lý do tôi sử dụng tput là vì nó được cho là được hỗ trợ phổ biến hơn so với lạ 033[01;31m\] trình tự. Ngoài ra, như một phần thưởng bổ sung, nếu bạn làm echo $PS1 tại Prompt, bạn sẽ thấy Prompt thô với màu sắc thay vì các chuỗi điều khiển khó hiểu.

3
Sildoreth

Một số trang trí văn bản (đậm) để dễ dàng phân biệt giữa Shell gốc và không root. Đối với Zsh:

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

Đối với Bash:

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

Tôi chỉ tự hỏi điều tương tự. Tôi có cách tiếp cận của riêng mình, nhưng tôi đang tìm giải pháp thay thế.

Tôi viết các hàm bash xung quanh các lệnh gọi chương trình và chuyển đầu ra của chúng mặc dù sed. Điều tôi thích về sed là nó sẽ sửa đổi và lặp lại từng dòng ngay lập tức => không có nhiều bộ đệm. Tuy nhiên, tôi không thích rằng với mỗi cuộc gọi đến một chương trình được bao bọc, mã sed được phân tích cú pháp và biên dịch.

Ví dụ: đây là những gì tôi làm để tô màu đầu ra của 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

Bạn có thể sử dụng cf của tôi để tô màu tên tệp trên dòng lệnh, đó là một công cụ tô màu dựa trên awk nhanh chóng hoạt động thông qua các đường ống - tô màu tên tệp trong Truecolor sRGB.

Nó có cấu hình mặc định có màu sắc rực rỡ và không giống như ls, nó không bị phạt hiệu năng khi thêm màu mới. (ls phải quét toàn bộ chuỗi LS_COLORS cho mỗi lần bỏ lỡ).

https://github.com/AdamDanischewski/cf

cf usage

cf screenshot

2
A.Danischewski

Tôi thấy Solarized hữu ích. Đây là một dự án gọn gàng với màu sắc đồng nhất cho nhiều ứng dụng.

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

2
Vamsi

Một công cụ đa năng Python để tô màu đầu ra của các lệnh là ' colout '

Bạn cung cấp cho nó một biểu thức chính quy với N nhóm, theo sau là danh sách N màu được phân tách bằng dấu phẩy. Bất kỳ văn bản phù hợp với một nhóm sẽ được hiển thị trong màu tương ứng.

Vì vậy, ví dụ, nếu bạn đang xem một số đầu ra thử nghiệm:

python -m unittest discover -v

Uncolored output of some Python unittests

sau đó bạn có thể làm cho nó nổi lên với:

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

Colored output of some Python unittests

Xem cách regex của tôi có ba nhóm (dấu ngoặc đơn) theo sau là ba màu (và tùy chọn ba kiểu, nhưng tôi đã sử dụng tốc ký để đặt tất cả các màu thành 'đậm', do đó, nhóm 'đen', khớp với văn bản trong ngoặc , đi ra như màu xám đen.)

Cũng lưu ý cách tôi phải thêm 2>&1 đến cuối lệnh Python, vì đầu ra của unittest nằm trên stderr, vì vậy tôi đã chuyển nó sang thiết bị xuất chuẩn để tôi có thể chuyển nó thành colout.

Điều này nói chung rất dễ sử dụng đến nỗi tôi thường thấy mình đang tạo ra các lệnh colout mới ngay lập tức và sử dụng lại hoặc sửa đổi chúng từ lịch sử dòng lệnh của tôi.

Nhược điểm duy nhất của nó là nó có dạng Python, không phải là tệp thực thi độc lập, vì vậy bạn cần cài đặt nó bằng pip hoặc Sudo python setup.py install.

2
Jonathan Hartley

Bạn cũng có thể thử một dự án giúp tô màu đầu ra các tập lệnh, có tên là ScriptEchoColor tại nguồn giả mạo: http://scriptechocolor.sourceforge.net/

ví dụ.:

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

Các màu tự động là cấu hình.

Đây là một ví dụ được thực hiện với nó: enter image description here

2
Aquarius Power

Tôi sử dụng gói mà .

cw là một trình bao bọc màu ANSI thời gian thực không xâm phạm cho các lệnh dựa trên unix phổ biến trên GNU/linux. cw được thiết kế để mô phỏng môi trường của các lệnh đang được thực thi, do đó, nếu một người gõ 'du', 'df', 'ping', v.v. trong Shell của họ, nó sẽ tự động tô màu đầu ra theo thời gian thực theo định nghĩa tập tin chứa định dạng màu mong muốn. cw có hỗ trợ tô màu khớp thẻ đại diện, tô màu mã thông báo, tiêu đề/chân trang, tô màu kịch bản trường hợp, tô màu định nghĩa phụ thuộc dòng lệnh và bao gồm hơn 50 tệp định nghĩa được tạo sẵn.

Nó gần như liền mạch, nhưng một khi tôi thấy rằng ps trong Shell tương tác trả về đầu ra khác nhau so sánh ps trong một đường ống.

1
user3132194

nếu bạn muốn làm cho vim đầy màu sắc giống như tôi, tôi khuyên bạn nên làm theo hai bước:

  1. tìm hiểu cách bật tính năng bằng cách theo liên kết sau: bật tô sáng cú pháp màu trong vi hoặc vim .

các bước chính trong liên kết:

  1. Chỉnh sửa tệp ~/.vimrc bằng cách gõ lệnh: vi ~/.vimrc

  2. Nối các tùy chọn sau: cú pháp trên

  3. Lưu và đóng tập tin

  4. Kiểm tra nó bằng cách chạy lệnh vim: vim foo.sh

  1. tìm một bảng màu mà bạn thích và sử dụng nó Lược đồ mà tôi sử dụng: lược đồ mà tôi đang sử dụng
0
ZhaoGang

Tôi muốn quảng cáo khiêm tốn ấn phẩm gần đây của tôi của ta hoặc textattr , một thư viện và lệnh- công cụ dòng nhằm mục đích thêm màu sắc và thuộc tính để làm đẹp đầu ra thiết bị đầu cuối của chương trình của bạn dễ dàng hơn bằng cách dịch các thông số kỹ thuật có thể đọc được của con người sang mã thoát ANSI.

Ví dụ:

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

hoặc thậm chí ngắn hơn:

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

hoặc thay thế:

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

sẽ cung cấp cho bạn một cái gì đó như:

enter image description here

Hiện tại thư viện này có thể sử dụng được từ bốn ngôn ngữ C, C++, D và Python ngoài việc sử dụng dòng lệnh từ Shell yêu thích của bạn.

Lưu ý rằng nó không tự động làm mờ đầu ra của bất kỳ chương trình nào khác. Nó là một tiện ích để giúp bạn không phải nhớ các mã tóm tắt. Bạn chỉ cần sử dụng tên màu rõ ràng hoặc dễ nhớ rgb cmyk w(hite) (of) f Các từ viết tắt.

Để biết thêm chi tiết, hãy truy cập repatt textattr .

0
jamadagni

Đối với Mac, bạn có thể sử dụng theo sau như đã chỉ định tại đây

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

Nếu bash là lựa chọn của bạn, tôi khuyên bạn nên oh-my-bash . Nếu zsh là lựa chọn của bạn, tôi khuyên bạn nên oh-my-zsh . Cả hai đều hỗ trợ màu sắc của thiết bị đầu cuối của bạn và đầu ra khác nhau.

0
TimWirtjes