Kolorowanie środowiska terminala i powłoki?

Większość czasu spędzam pracując w środowiskach Uniksowych i używając emulatorów terminali. Próbuję użyć koloru w wierszu poleceń, ponieważ kolor sprawia, że wynik jest bardziej użyteczny i intuicyjny.

Jakie są opcje dodawania koloru do mojego środowiska terminala? Jakich sztuczek używasz? Jakie pułapki napotkałeś?

Niestety, obsługa kolorów różni się w zależności od typu terminala, systemu operacyjnego, ustawienia TERM, narzędzia, błędnych implementacji itp.

Oto kilka wskazówek dotyczących mojej konfiguracji , po wielu eksperymentach:

  1. Zwykle ustawiam TERM=xterm-color, który jest obsługiwany na większości hostów (ale nie na wszystkich).
  2. Pracuję na wielu różnych hostach, różnych wersjach systemu operacyjnego itp. Używam wszystkiego, od macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux i FreeBSD. Jeśli to możliwe, staram się, aby wszystko było proste i ogólne.
  3. Wykonuję sporo pracy przy użyciu GNU screen, co dodaje kolejną warstwę zabawy.
  4. Wiele systemów operacyjnych ustawia takie rzeczy jak dircolors i domyślnie, a nie chcę modyfikować tego na stu różnych hostach. Więc staram się trzymać wartości domyślnych. Zamiast tego poprawiam konfigurację kolorów terminala.
  5. Użyj koloru dla niektórych poleceń uniksowych (ls, grep, less, vim) i Bash podpowiedź . Te polecenia wydają się używać standardowych „ sekwencji ucieczki ANSI „. Na przykład:

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

Opublikuję mój .bashrc i odpowiem na moje własne pytanie Styl niebezpieczeństwa .

Komentarze

  • fyi moje podejście (patrz odpowiedź poniżej) rozwiązuje problemy z różnicami w systemach OSX i Linux, na przykład kolor na jednym to ls -G i z drugiej strony ls –color-auto
  • Czy ktoś widział narzędzie do kolorowania kolumn? To jest column -t --color?

Odpowiedź

Oto kilka rzeczy, które możesz zrobić:

Redaktorzy + kod
Wiele redaktorów ma składnię podkreślanie wsparcia. vim i emacs mają go domyślnie włączone. Możesz również włączyć go w nano .

Możesz również składać kod podświetlenia w terminalu, używając Pygments jako narzędzia wiersza poleceń.

grep
grep --color=auto podkreśla wszystkie dopasowania. Możesz także użyć export GREP_OPTIONS="--color=auto", aby uczynić go trwałym bez aliasu. Jeśli używasz --color=always, to „ll użyjesz koloru nawet podczas rur , co wprowadza zamieszanie.

ls

ls --color=always

Kolory określone przez:

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

(wskazówka: dircolors może być pomocna)

PS1
Możesz ustawić PS1 (znak zachęty) do używania kolorów. Na przykład:

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

Stworzy PS1 na przykład:

[yellow] lucas @ ubuntu: [red] ~ [normal] $

Dzięki temu możesz być naprawdę kreatywny. Jako pomysł:

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

Umieszcza pasek u góry terminala z przypadkowymi informacjami. (Aby uzyskać najlepsze wyniki, użyj także alias clear="echo -e "\e[2J\n\n"".)

Pozbywanie się sekwencji ucieczki

Jeśli coś utknęło, wyświetlając kolor, kiedy tego nie chcesz, używam tego sed linia do usunięcia sekwencji ucieczki:

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

Jeśli chcesz uzyskać bardziej autentyczne wrażenia, możesz również pozbyć się linii zaczynających się od \e[8m, co instruuje terminal, aby ukrył tekst. (Nie jest szeroko obsługiwany).

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

Pamiętaj też, że te ^ [s powinny być rzeczywiste, dosłowne ^ [s. Możesz je wpisać naciskając ^ V ^ [w bash, czyli Ctrl + V , Ctrl + [ .

Komentarze

  • Pierwsza linia PS1 powinna wyglądać następująco: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Po czwartym ukośniku odwrotnym znajduje się zbędny znak x.
  • Escapes powinny być umieszczone w \[...\], w przeciwnym razie polecenia w drugiej linii nadpiszą pierwszą linię. PS1 = ' [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ '
  • ls --color=always nie ' nie działa.Podejście @Michael Durrant ' jest lepsze w tym przypadku: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

Odpowiedź

Używam również:

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

A jeśli lubisz pokolorować podpowiedź, zdefiniowane zmienne kolorów mogą bądź przydatny:

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

A potem moja zachęta wygląda mniej więcej tak:

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) wywołuje skrypt Pythona w moim ~ / sbin, który wyświetla informacje kontroli wersji o bieżącej ścieżce. Obejmuje wsparcie dla Mercurial, Git, Svn, Cvs itp. Autor skryptu ma źródło tutaj .

Zrzut ekranu z monitem Bash

To jest pełne źródło mojej konfiguracji podpowiedzi:

Komentarze

  • Zobacz tutaj rozwiązanie problemu z linią, który otrzymałem, gdy użyłem powyższego PS1: stackoverflow.com/questions/5087036/…
  • I ' zaktualizowaliśmy odpowiedź, aby odzwierciedlić nawiasy ze znakami ucieczki dla kolorów w zachęcie. Dzięki!
  • $LSCOLORS i $CLICOLOR są przeznaczone dla BSD ls. GNU ls (Linux) używa $LS_COLORS z inną składnią. Ponieważ GNU czuję się jak w domu, używam LSCOLORS=exgxfxDacxBaBaCaCaeaEa do naśladowania kolorów GNU ' na BSD.
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • Może być konieczne pobranie pliku .bashrc, aby modyfikacja odniosła skutek. Możesz to zrobić za pomocą następującego polecenia. source /path/to/.bashrc

Odpowiedź

grep i ls zostały już wspomniane, jeśli chcesz mieć dużo więcej kolorów, wypróbuj Generic Coloriser , jego pierwotnym celem było pokolorowanie plików dziennika, ale zaraz po wyjęciu z pudełka koloruje również ping, traceroute, gcc, make, netstat, diff, last, ldap i cvs.

Można je łatwo rozszerzyć, jeśli znać wyrażenia regularne. Dodałem do listy ps i nmap (jeśli dojdziesz do grc Z przyjemnością udostępnię pliki .conf dla tych dwóch narzędzi)

(Przy okazji, aby zainstalować przez synaptic, pacman i podobnie możesz mieć więcej szczęścia w wyszukiwaniu for „grc”)

Komentarze

  • grc obsługuje teraz ps domyślnie. ' bym zainteresował się Twoimi nmap kolorami. Zobacz także moją odpowiedź dotyczącą aliasowania wszystkich tych elementów w sposób, który wchłonie nowe polecenia podczas aktualizacji grc.
  • Zauważyłem to. tutaj ' s moja konf.nmapa (i wszystko inne, naprawdę) gist.github.com/sygo/844982#file-conf -nmap – Zauważyłem, że pracujesz w infosec, możesz uznać conf.hexdump za interesujący, ale nie ' jeszcze go nie skończyłem.
  • Dzięki @Sygo. ' rozwidliłem i poprawiłem Twoją istotę. ' nigdy nie zatwierdzałem danych za pomocą git (nie mówiąc już o github ' gists) i nie mogę dowiedzieć się, jak zaproponować scalenie ich z powrotem do ciebie (ja ' zgaduję, że to dlatego, że streszczenia są zbyt uproszczone).
  • Podejrzewam, że możesz ' t ponieważ jest to ' istota, a nie właściwe repozytorium. Sprawdziłem jednak twój fork i ' zdecydowanie próbuję twojej wersji. Jestem ' ciekawy, w co ten zrzut szesnastkowy zmieni się w …

Odpowiedź

Przez lata doskonaliłem mój .bashrc, aby pracować zarówno na OSX, jak i Ubuntu.
Zmniejszyłem również rozmiar do 28 wierszy za pomocą zwartych instrukcji warunkowych.
Dzięki temu , mój znak zachęty PS1 wygląda tak: tutaj wprowadź opis obrazu

z czasem na czerwono, nazwa użytkownika na zielono, nazwa komputera na jasnoniebieskim, pwd na ciemnoniebieskim i gałąź git na żółto.

Funkcja mojego znaku zachęty PS1:

  • pokazuje gałąź git!
  • długie ścieżki katalogów (więcej niż 6 elementów) to ” przycięte „, aby pokazać pierwsze 3 i ostatnie 3 katalogi z _ między nimi (to jest pwd sed część LOKALIZACJI).
  • powrót karetki na końcu, aby znak zachęty był zawsze po lewej stronie!

Odpowiednie wiersze z mojego pliku .bashrc to:

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

Dla ls z kolorami, jeśli są dostępne d brak błędów, gdy nie (tj.OSX):

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

Komentarze

Odpowiedź

Kolory stron podręcznika ( więcej szczegółów ):

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

Kolory dla grep (1;32 jest jasnozielony, zobacz inne posty dla innych kolorów):

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" 

Więcej kolorów dla 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 

Zainstaluj grc ( Ogólny koloryzator ) i dodaj go do swoich aliasów:

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

Kolory dla diff : Za dużo treści dla funkcji, użyj skryptu i aliasu w pliku rc (niepotrzebne, jeśli zainstalowałeś 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; 

Kolory dla 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 polecenia bash

Komentarze

  • Zagłosuj za zrzutem ekranu
  • Moja PSWD() funkcja była kiedyś zgodna z POSIX, ale ' jest o wiele łatwiejsza przy użyciu obsługi podciągów bash / zsh. Zobacz wersja 6 dla wersji POSIX, która zawiera wiele znaków zapytania i nie była ' w ogóle przystosowana do terminala szerokość. Nie ' nie zaktualizowałem zrzutu ekranu, ale ' to tylko niewielka zmiana przy szerokości 80 znaków.
  • CLICOLOR=1 nie ' nie działa dla mnie z FREEBSD 11.2
  • @SimonC. – Być może używasz narzędzi GNU w systemie FreeBSD, a nie BSD. CLICOLOR=1 ls powinno zrobić to samo, co ls -G przy użyciu BSD (ls -g na starszych BSD). Jeśli ls --color działa (bez błędu), ' używasz GNU ' s ls i $CLICOLOR jest ignorowane.
  • @SimonC. – Musisz faktycznie załadować ~/.bashrc, aby zmiany odniosły skutek. Uruchom source ~/.bashrc lub rozpocznij nową sesję basha (uruchom terminal lub uruchom bash).

Odpowiedź

Ustaw pogrubioną / kolorową podpowiedź. Z cyberciti.biz i 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 \$ " 

Udało mi się również znaleźć ustawienia kolorów, które są szeroko obsługiwane i które nie wyświetlają znaków gobbledygook w starszych środowiskach (nawet FreeBSD4!) i wydaje się działać dobrze, jeśli TERM = vt100, xterm , kolor xterm. (Przez większą część). Z mojego .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 

Komentarze

Odpowiedź

Rzeczy, które nie zostały tu już powiedziane:

Aby pokolorować wyjście swoich kompilacji za pomocą gcc , jest colorgcc autorstwa Johannesa Schlütera

Aby pokolorować logi, jest multitail

Aby pokolorować dowolne standardowe wyjście, połączyłem xcol

przykład xcol

Osobiście używam te z narzędzia 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 

Używam tych zmiennych w moich skryptach w ten sposób

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

Podoba mi się również ta mała funkcja coloredEcho (znaleziona na 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 

Przepraszamy, nie mogę wysyłać więcej linków

Komentarze

  • Witaj, jak tworzysz flagi dla ścieżki zachęty? Wspominam o prostokątnych słupkach z trójkątnymi końcami. Dzięki
  • czy to działa również w terminalu Ubuntu GNU?
  • lnav to także świetne narzędzie do wyświetlania kolorowych plików dziennika

Odpowiedź

Jest dobre narzędzie do ustawiania kolorów dla polecenia ls – http://geoff.greer.fm/lscolors/

Odpowiedź

Proponuję sprawdzić ZSH i jego wtyczka oh-my-zsh , która ma jedną z najpotężniejszych funkcji konsolowych, jakie widziałem. Jednym z nich jest wybór motywu dla Twój terminal. To jest przykład mojego motywu … W tty kolory nie są tak ciepłe, ale są takie same jak na tym zdjęciu … Spodoba ci się to w każdym razie!

tutaj wprowadź opis obrazu

Komentarze

  • Gdybym mógł, zagłosowałbym negatywnie na Oh-My-ZSH sugestia. Jako inżynier systemowy, który intensywnie pracuje w Terminalu i jako ktoś, kto próbował wdrożyć zsh / oh-my-zsh do mojego przepływu pracy, mogę szczerze powiedzieć, że nigdy nikomu nie poleciłbym ZSH. Jasne, możesz dowiązać symbolicznie zsh do pliku nazwanego na cześć dowolnej innej powłoki i emulować tę powłokę, ale kiedy to zrobisz, nie będzie to ' t czytać twojego .bashrc, .bash_profile itp. , nie możesz umieścić emulate bash w swoich plikach .zprofile ani .zshrc. Dla każdego, kto pracuje z zaawansowanymi funkcjami w BASH, istnieje wiele subtelności, które cię ugryźają. BASH jest lepszym sh.
  • Jedyną rzeczą, którą ZSH ma po wyjęciu z pudełka, która jest lepsza niż BASH, jest uzupełnianie poleceń, ale nawet to można programować w BASH. Może ktoś, kto ' nie używa powłoki poza okazjonalnymi, przyziemnymi zadaniami, powinien przyjąć ZSH, ale ' nie jest dla nikogo, kto musi intensywnie używaj powłoki. operator =~ może cię ugryźć, sposób, w jaki ZSH obsługuje tablice, może cię ugryźć itp. Po używaniu ZSH / Oh-My-ZSH przez około 9 miesięcy miałem go dość. Używałem niestandardowego motywu, który napisałem samodzielnie, przeportowałem go do BASH i napisałem własną linię zachęty gita i ' nigdy nie oglądałem się za siebie. Teraz nie martwię się już o przenośność
  • ” ma jedną z najpotężniejszych funkcji konsoli, jakie widziałem. Jednym z nich jest wybór motywu dla Twojego terminala. ”
  • @JonathanHartley, Twój komentarz wygląda na to, że zostawiłeś go niekompletny. ?
  • Dziękuję za troskę, ale mój komentarz mówi wszystko, co chciałem powiedzieć.

Odpowiedź

Aby wyświetlić wynik różnic w kolorze, użyj colordiff .

sudo apt-get install colordiff 

Pipe dowolne wyjście w formacie diff do colordiff:

wyjście diff potokowane do colordiff

Obejmuje to niektóre alternatywne formaty diff, takie jak -y (side-by-side.)

Alternatywnie, jeśli jest wywoływany samodzielnie ( bez niczego potokowanego), to zachowuje się jak otoka wokół „diff” i koloruje wyjście. Dlatego mam to w moim .bashrc, na alias „diff” do colordiff.

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

Komentarze

  • W przykładzie .bashrc brakuje ostatniego fi i można je przekonwertować na polecenie jednowierszowe: type colordiff &> /dev/null && alias diff='colordiff'

Odpowiedź

Trochę dekoracji tekstu (pogrubienie) w celu łatwego odróżnienia powłoki głównej od powłoki innej niż root. Dla Zsh:

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

Dla Bash:

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

Komentarze

  • Określ swoją powłokę. Pytanie ' jest jedynym znacznikiem specyficznym dla powłoki jest bash , ale wydaje mi się, że Twój kod nie jest bash.
  • @manatwork: przepraszam, zapomniałem wspomnieć, że to Zsh. Zaktualizowałem mój post.

Odpowiedź

Po prostu zastanawiałem się nad tym samym. Mam własne podejście, ale szukam alternatyw.

Piszę opakowania basha wokół wywołań programów i potokiem ich dane wyjściowe, chociaż sed. Co mi się podoba sed polega na tym, że od razu zmieni i powtórzy każdą linię => niewiele buforuje. Jednak nie podoba mi się to, że przy każdym wywołaniu opakowanego programu sed kod jest analizowany i kompilowany.

Na przykład to, co robię, aby pokolorować wyjście 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" 

Odpowiedź

Aby ustawić monit, mam to w moim pliku .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 

To daje mi komunikat, który wygląda mniej więcej tak:

user@host(bash): ~/bin > 

Katalog roboczy jest zielony . A nazwa użytkownika jest pogrubiona i niebieskozielona, chyba że uruchomiłem powłokę z sudo, w którym to przypadku nazwa użytkownika („root”) jest pogrubiona i czerwona.

Osobiście bardzo podoba mi się przechowywanie znaków sterujących formatowaniem w zmiennych, ponieważ ułatwia to czytanie kodu do ustawiania zachęty. Ułatwia również edycję zachęty o wiele .

Powodem, dla którego używam tput jest to, że powinien być bardziej uniwersalny niż dziwne sekwencje 033[01;31m\]. Dodatkowo, jako dodatkowy bonus, jeśli wykonasz echo $PS1 po monicie, zobaczysz nieprzetworzony znak zachęty z kolory zamiast tych niezrozumiałych sekwencji sterujących.

Odpowiedź

Możesz również wypróbować projekt, który pomaga w kolorowaniu wyników skryptów, jego nazwany ScriptEchoColor w źródłowej kuźni: http://scriptechocolor.sourceforge.net/

np .:

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 

Kolory automatyczne są konfigurowalne.

to przykład zrobiony z tym: tutaj wprowadź opis obrazu

Odpowiedź

Doskonałym narzędziem ogólnego przeznaczenia w Pythonie do kolorowania wyników poleceń jest „ colout

Dajesz mu wyrażenie regularne z N grupami, po których następuje lista N kolorów oddzielonych przecinkami. Każdy tekst pasujący do grupy zostanie wyświetlony w odpowiednim kolorze.

Na przykład, jeśli „patrzysz na jakiś wynik testu:

python -m unittest discover -v 

Niekolorowany wynik niektórych testów napisanych w Pythonie

następnie możesz go ozdobić się z:

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

Kolorowe wyjście niektórych wpisów w Pythonie

Zobacz, jak moje wyrażenie regularne ma trzy grupy (nawias), po których następują trzy kolory (i opcjonalnie trzy style, ale użyłem skrótu, aby ustawić wszystkie kolory na „pogrubione”) , więc „czarna” grupa, do której pasuje tekst w nawiasach, ma kolor ciemnoszary.)

Zwróć też uwagę, jak musiałem dodać 2>&1 na końcu wywołania Pythona, ponieważ wynik unittest znajduje się na stderr, więc przeniosłem go na stdout, aby móc potokować go do colouta.

Generalnie jest to tak łatwe w użyciu, że często tworzyłem nowe colout invocat jony w locie i ponowne ich używanie lub modyfikowanie z mojej historii wiersza poleceń.

Jedynym jego minusem jest to, że jest to pakiet Pythona, a nie samodzielny plik wykonywalny, więc musisz zainstalować używając pip lub sudo python setup.py install.

Odpowiedź

Solaryzacja jest przydatna. To zgrabny projekt z jednolitymi kolorami dla wielu aplikacji.

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

Odpowiedź

Możesz użyć mojego cf do kolorowania nazw plików w wierszu poleceń, jest to szybki, mały, oparty na awk koloryzator, który działa przez potoki – kolorowanie nazw plików w Truecolor sRGB.

Ma jaskrawe kolory domyślna konfiguracja iw przeciwieństwie do ls nie powoduje spadku wydajności przy dodawaniu nowych kolorów. (ls musi skanować cały ciąg LS_COLORS dla każdego braku).

https://github.com/AdamDanischewski/cf

użycie cf

cf zrzut ekranu

Odpowiedź

Na Macu możesz użyć następującego tutaj

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

Odpowiedź

Używam kolorowego opakowania .

cw to nieinwazyjne opakowanie koloru ANSI w czasie rzeczywistym dla typowych poleceń opartych na Uniksie w systemie GNU / linux. cw ma na celu symulację środowiska wykonywanych poleceń, więc jeśli osoba wpisze w swojej powłoce „du”, „df”, „ping” itp., automatycznie pokoloruje wyjście w czasie rzeczywistym zgodnie z definicją plik zawierający żądany format koloru. cw obsługuje kolorowanie symboli wieloznacznych, kolorowanie tokenizowane, nagłówki / stopki, kolorowanie scenariuszy przypadków, kolorowanie definicji zależnych od wiersza poleceń i zawiera ponad 50 gotowych plików definicji.

Jest prawie bezproblemowe, ale kiedy odkryłem, że ps w powłoce interaktywnej zwraca inne wyjście, porównując ps w potoku.

Odpowiedź

Jeśli chcesz, aby Twój vim był kolorowy tak jak ja, sugeruję wykonanie dwóch kroków:

  1. naucz się włączać funkcję, klikając ten link: włącz podświetlanie składni kolorów w vi lub vim .

kluczowe kroki w linku:

  1. Edytuj plik ~ / .vimrc, wpisując polecenie: vi ~ /.vimrc

  2. Dołącz następującą opcję: składnia w

  3. Zapisz i zamknij plik

  4. Przetestuj, uruchamiając polecenie vim: vim foo.sh

  1. znajdź odpowiedni schemat kolorów i użyj go. Schemat, którego używam: schemat, którego używam

Komentarze

  • Korzystając z linków do źródła zewnętrznego, należy sprawdzić część ” Podaj kontekst dla linków ” (Cytuj ważne części) odpowiedniej części przewodnika: unix.stackexchange.com/help/how-to-answer

Odpowiedź

Jeśli wolisz bash, polecam oh-my-bash . Jeśli wybierzesz zsh, polecam oh-my-zsh . Oba obsługują kolorowanie terminala i różne wyjścia.

Odpowiedź

Chcę pokornie reklamować moją ostatnią publikację z ta lub textattr , biblioteka i narzędzie wiersza poleceń ma to na celu ułatwienie dodawania koloru i atrybutów w celu upiększenia wyjścia terminala programu poprzez przetłumaczenie specyfikacji czytelnych dla człowieka na kody ucieczki ANSI.

Na przykład:

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

lub jeszcze krócej:

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

lub inny:

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

wyświetli coś takiego:

tutaj wprowadź opis obrazu

Obecnie ta biblioteka jest dostępna w czterech językach C, C ++, D i Python, z wyjątkiem używania wiersza poleceń z Twojej ulubionej powłoki .

Zauważ, że nie powoduje to automatycznego kolorowania wyników innych programów. Jest to raczej narzędzie, które pomaga pragnąc zapamiętać zawiłe kody. Wystarczy użyć oczywistych nazw kolorów lub ich łatwych do zapamiętania rgb cmyk w (hite) (of) f skróty.

Aby uzyskać więcej informacji, odwiedź repozytorium textattr .

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *