Většinu času trávím prací v unixových prostředích a používáním terminálových emulátorů. Snažím se použít barvu na příkazovém řádku, protože díky barvě je výstup užitečnější a intuitivnější.
Jaké možnosti existují pro přidání barvy do mého terminálového prostředí? Jaké triky používáte? S jakými úskalími jste se setkali?
Bohužel se podpora barev liší podle typu terminálu, OS, nastavení TERM, obslužného programu, implementace buggy atd.
Zde je několik tipů z mého nastavení , po mnoha experimentech:
- Mám sklon nastavovat
TERM=xterm-color
, který je podporován většinou hostitelů (ale ne všemi). - Pracuji na mnoha různých hostitelích, různých verzích OS atd. Používám vše od macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux a FreeBSD. Snažím se, aby to bylo jednoduché a obecné, pokud je to možné.
- Dělám spoustu práce pomocí GNU
screen
, což přidává další vrstvu zábavy. - Mnoho OS nastavuje věci jako
dircolors
a ve výchozím nastavení to nechci upravovat na stovce různých hostitelů. Snažím se tedy držet výchozích hodnot. Místo toho vyladím barevnou konfiguraci terminálu. -
Použít barvu pro některé unixové příkazy (
ls
,grep
,less
,vim
) a Bash prompt . Zdá se, že tyto příkazy používají standardní „ ANSI escape sekvence „. Například:alias less="less --RAW-CONTROL-CHARS" export LS_OPTS="--color=auto" alias ls="ls ${LS_OPTS}"
Zveřejním svůj .bashrc
a odpovím na svoji vlastní otázku Jeopardy Style .
Komentáře
odpověď
Zde je pár věcí, které můžete udělat:
Editoři + kód
Mnoho editorů má syntaxi zvýraznění podpory. vim
a emacs
jej mají ve výchozím nastavení zapnutý. Můžete jej také povolit v části nano
.
Můžete také zvýraznit syntaxi kódu na terminál pomocí Pygmentů jako nástroje příkazového řádku.
grep
grep --color=auto
zvýrazní všechny zápasy. Můžete také použít export GREP_OPTIONS="--color=auto"
, aby byl trvalý bez aliasu. Pokud používáte --color=always
, bude to „ll používat barvu i při použití potrubí , což je matoucí.
ls
ls --color=always
Barvy určené:
export LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33"
(nápověda: dircolors
mohou být užitečné)
PS1
Svůj PS1 (příkazový řádek) můžete nastavit tak, aby používal barvy. Například:
PS1="\e[33;1m\u@\h: \e[31m\W\e[0m\$ "
Vyrobí PS1 jako:
[žlutá] lucas @ ubuntu: [červená] ~ [normální] $
S tímto můžete být opravdu kreativní. Jako nápad:
PS1="\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ "
Vložíte do horní části terminálu lištu s náhodnými informacemi. (Nejlepších výsledků dosáhnete, použijte také alias clear="echo -e "\e[2J\n\n""
.)
Jak se zbavit únikových sekvencí
Pokud se něco zasekne a vydává barvu, když to nechcete, použiji tento sed
řádek pro odstranění únikových sekvencí:
sed "s/\[^[[0-9;]*[a-zA-Z]//gi"
Pokud chcete autentičtější zážitek, můžete se také zbavit řádků začínajících \e[8m
, který dává terminálu pokyn, aby text skryl. (Není široce podporováno.)
sed "s/^\[^[8m.*$//gi"
Upozorňujeme, že tyto ^ [s by měly být skutečné, doslovné ^ [s. Můžete je napsat stisknutím ^ V ^ [v bash, tj. Ctrl + V , Ctrl + [ .
Komentáře
- První řádek PS1 by měl číst takto:
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. Po čtvrtém zpětném lomítku je zbytečné x. - Úniky by měly být uzavřeny v
\[...\]
, jinak příkazy ve druhém řádku přepíší první řádek. PS1 = ‚ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‚ -
ls --color=always
nefunguje ‚.K tomu je lepší přístup @Michael Durrant ‚:ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
odpověď
Používám také:
export TERM=xterm-color export GREP_OPTIONS="--color=auto" GREP_COLOR="1;32" export CLICOLOR=1 export LSCOLORS=ExFxCxDxBxegedabagacad
A pokud chcete barevně vyzvat vaši výzvu, můžete definovat barevné vary být užitečný:
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 moje výzva je asi taková:
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) volá skript pythonu v mém ~ / sbin, který tiskne informace o kontrole verze o aktuální cestě. Zahrnuje podporu pro Mercurial, Git, Svn, Cvs atd. Autor skriptu má zdroj zde .
Toto je úplný zdroj mé rychlé konfigurace:
Komentáře
- Zde naleznete řešení problému s linkou, který jsem dostal, když jsem použil výše uvedené PS1: stackoverflow.com/questions/5087036/…
- I ‚ Aktualizovali jsme odpověď tak, aby odrážela uvozené závorky pro barvy ve výzvě. Děkujeme!
-
$LSCOLORS
a$CLICOLOR
jsou pro BSD ls. GNU ls (Linux) používá$LS_COLORS
s jinou syntaxí. Protože se GNU cítí jako domov, používámLSCOLORS=exgxfxDacxBaBaCaCaeaEa
k napodobování barev GNU ‚ na BSD. -
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
- Aby byla změna účinná, budete možná muset získat soubor
.bashrc
. Můžete to udělat pomocí následujícího příkazu.source /path/to/.bashrc
odpověď
grep
a ls
již byly zmíněny, pokud chcete mnohem více barev, podívejte se Generic Coloriser , jeho počátečním účelem bylo obarvit soubory protokolu, ale hned po vybalení také vybarví ping
, traceroute
, gcc
, make
, netstat
, diff
, last
, ldap
a cvs
.
Je snadné jej rozšířit, pokud znáte regulární výrazy. Do seznamu jsem přidal ps
a nmap
(pokud se dostanete do grc
Budu více než rád sdílet soubory .conf pro tyto dva nástroje)
(Btw, nainstalovat jej pomocí synaptic
, pacman
a podobně byste měli mít větší štěstí při hledání pro „grc“)
Komentáře
-
grc
nyní podporujeps
ve výchozím nastavení. ‚ Zajímám se o vašenmap
barvení. Viz také moje odpověď na aliasy všech těchto způsobů, které budou při upgradu grc absorbovat nové příkazy. - Všiml jsem si toho. zde ‚ s mým conf.nmap (a vším ostatním opravdu) gist.github.com/sygo/844982#file-conf -nmap – všiml jsem si, že pracujete v infosecu, mohl by vás zajímat conf.hexdump, zatím jsem to ‚ nedokončil.
- Díky @Sygo. ‚ jsem rozdvojil a přepracoval vaši podstatu. ‚ Ve skutečnosti jsem nikdy nespustil data pomocí git (natož github ‚ s) a nemohu přijít na to, jak navrhnout jejich sloučení zpět vám (já ‚ hádám, že je to proto, že seznamy jsou příliš zjednodušené).
- Mám podezření, že můžete ‚ t protože ‚ sahá a není správným úložištěm. Zkontroloval jsem však vaši vidličku a já ‚ m rozhodně dávám vaší verzi šanci. Jsem ‚ zvědavý na to, z čeho se ten hexadecimální výpis promění …
Odpovědět
Během let jsem vylepšil svůj .bashrc, abych pracoval na OSX i Ubuntu.
Také jsem jej zmenšil na 28 řádků pomocí příkazů kompaktní podmínky.
S ním , moje výzva PS1 vypadá takto:
s časem v červené barvě, uživatelským jménem v zelené barvě, názvem stroje ve světle modré barvě, pwd v tmavší modré barvě a větev git žlutě.
Funkce mého řádku PS1:
- zobrazuje větev git!
- dlouhé cesty k adresáři (více než 6 prvků) jsou „ oříznuto „pro zobrazení horních 3 a spodních 3 adresářů s mezičasem
_
(to jepwd sed
část LOCATION). - návrat vozíku na konci, aby byla výzva vždy nalevo!
Relevantní řádky z mého souboru .bashrc
jsou:
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\]>"
Pro ls s barvami, pokud jsou k dispozici d žádné chyby, pokud nejsou (tj.OSX):
ls --color=al > /dev/null 2>&1 && alias ls="ls -F --color=al" || alias ls="ls -G"
Komentáře
- Barvy jsou k dispozici pro
ls
na OS X, ale provádí se to pomocíexport CLICOLOR=1
. - @ThomasW, ale ne na linuxu :-p Ten člověk používá obojí.
- ThomasW má nicméně pravdu, když poukazuje na to, že odpověď je chybná, když říká, že barvy nejsou k dispozici u
ls
v systému MacOS 10. Odpověď je také chybná v tom, že rychlé řetězce zde jsou ve skutečnosti vadné. správně nevyvažují\[
a\]
a způsobily problémy alespoň jedné osobě, která tuto odpověď kopírovala .
Odpovědět
Barvy pro manuálové stránky ( další podrobnosti ):
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 -; }
Barvy pro grep (1;32
je jasně zelená, další barvy najdete zde, další barvy naleznete zde):
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"
Více barev pro 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
Instalovat grc
( generický barvicí prostředek ) a přidejte jej ke svým aliasům:
# 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 }
Barvy pro diff : Příliš mnoho obsahu pro funkci, použijte skript a alias ve svém souboru rc (zbytečné, pokud jste nainstalovali 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;
Barvy pro 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
Komentáře
- Hlasujte pro snímek obrazovky
- Moje
PSWD()
funkce byla dříve kompatibilní s POSIXem, ale ‚ je mnohem jednodušší pomocí zpracování podřetězců bash / zsh. Viz revize 6 pro verzi POSIX, která zahrnuje spoustu otazníků a nebyla vůbec ‚ přizpůsobitelná terminálu šířka. Nerealizoval jsem ‚ aktualizovat snímek obrazovky, ale ‚ to je při šířce 80 znaků jen malá změna. -
CLICOLOR=1
nefunguje ‚ pro FREEBSD 11.2 - @SimonC. – Ve svém systému FreeBSD možná používáte GNU utility než ty BSD.
CLICOLOR=1 ls
by měl dělat totéž jakols -G
s použitím BSD (ls -g
na starších BSD). Pokudls --color
funguje (bez chyby), ‚ používáte GNU ‚ sls
příkaz a$CLICOLOR
je ignorován. - @SimonC. – Aby se změny projevily, musíte skutečně načíst
~/.bashrc
. Spusťtesource ~/.bashrc
nebo spusťte novou bash relaci (spusťte terminál nebo spusťtebash
).
Odpovědět
Nastavit tučnou / barevnou výzvu. Z cyberciti.biz a 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 \$ "
Také se mi podařilo najít nastavení barev, která jsou široce podporována a která ve starších prostředích (dokonce i FreeBSD4!) nevytiskne znaky gobbledygook a zdá se, že funguje dobře, pokud TERM = vt100, xterm , xterm-color. (Z větší části). Z mého souboru .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
Komentáře
- Nebo pokud chcete použít ZSH, Phil Gold Výzva ‚ na aperiodic.net/phil/prompt je umělecké dílo.
Odpověď
Věci, které zde již nebyly řečeny:
Zbarvení výstupu vašich kompilací pomocí gcc , existuje colorgcc od Johannesa Schlütera
K vybarvení protokolů existuje více podrobností
K vybarvení libovolného standardního výstupu jsem dal dohromady xcol
Osobně používám ty z nástroje 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
Tyto proměnné používám ve svých skriptech takhle
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Také se mi líbí tato malá funkce coloredEcho (k dispozici na přetečení zásobníku)
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
Je nám líto, není povoleno zveřejňovat další odkazy
Komentáře
- Dobrý den, jak vytvoříte příznaky pro cestu výzvy? Zmíním obdélníkové pruhy s trojúhelníkovými konci Díky
- funguje to také v terminálu ubuntu gnu?
- lnav je také skvělý nástroj pro zobrazení barevných logových souborů
odpověď
Existuje dobrý nástroj pro nastavení barev příkazu ls – http://geoff.greer.fm/lscolors/
Odpověď
Navrhuji, abyste si prohlédli ZSH a jeho plugin oh-my-zsh , který má jednu z nejsilnějších funkcí konzoly, kterou jsem viděl. Jednou z nich je výběr tématu pro váš terminál. Toto je příklad mého tématu … Ve tty nejsou barvy tak teplé, ale jsou stejné jako na tomto obrázku … Jakkoli se vám budou líbit!
Komentáře
- Kdybych mohl, hlasoval bych proti tomuto pro Oh-My-ZSH Jako systémový inženýr, který intenzivně pracuje v Terminálu, a jako někdo, kdo se pokusil přijmout zsh / oh-my-zsh do mého pracovního toku, mohu upřímně říci, že bych ZSH nikdy nikomu nedoporučoval. Jistě, můžete odkazovat zsh na soubor pojmenovaný po jakémkoli jiném shellu a tento shell emulovat, ale když to uděláte, ‚ nebude číst vaše .bashrc, .bash_profile atd. Také , nemůžete
emulate bash
vložit do svých souborů .zprofile nebo .zshrc. Pro každého, kdo pracuje s pokročilými funkcemi v BASH, existuje mnoho jemností, které vás kousnou. BASH je lepší sh. - Jediná věc, kterou má ZSH po vybalení z krabice a která je lepší než BASH, je dokončení příkazu, ale i to je programovatelné v BASH. Možná by někdo, kdo nepoužívá prostředí ‚ t, kromě příležitostných pozemských úkolů, měl použít ZSH, ale ‚ to není pro každého, kdo potřebuje používat shell značně. operátor
=~
vás může kousnout, způsob, jakým vás může kousnout pole ZSH, atd. Po použití ZSH / Oh-My-ZSH asi 9 měsíců jsem toho měl dost. Používal jsem vlastní téma, které jsem si napsal sám, přenesl jsem ho na BASH a napsal svůj vlastní git promptline a nikdy jsem se neohlédl zpět. ‚ Nyní si už nedělám starosti s přenositelností. - “ má jednu z nejvýkonnějších funkcí konzoly, kterou jsem viděl. Jedním z nich je výběr motivu pro váš terminál. “
- @JonathanHartley, váš komentář vypadá, jako byste jej nechali neúplný. ?
- Děkuji za vaše obavy, ale můj komentář říká vše, co jsem chtěl říct.
Odpověď
K barevnému zobrazení výstupu rozdílu použijte colordiff .
sudo apt-get install colordiff
Potrubí jakýkoli výstup formátu diff do colordiff:
To zahrnuje některé alternativní formáty diff, například -y
(side-by-side.)
Alternativně, pokud je vyvolán samostatně ( bez toho, aby do něj bylo vloženo cokoli), pak funguje jako obal kolem „diff“ a barevně upravuje výstup. Mám to tedy v mém .bashrc, abych alias „diff“ přivedl na colordiff.
# if colordiff is installed, use it if type colordiff &>/dev/null ; then alias diff=colordiff
Komentáře
- V příkladu
.bashrc
chybí poslednífi
a lze jej převést na jednořádkový příkaz:type colordiff &> /dev/null && alias diff='colordiff'
Odpovědět
Některé textové dekorace (tučně) pro snadné rozlišení mezi kořenovým a jiným kořenovým shellem. Pro Zsh:
if test $UID = 0 then PS1="%B${PS1}%b " fi
Pro Bash:
if test $UID = 0 then PS1="\033[1m${PS1}\033[0m" fi
Komentáře
- Zadejte svůj shell. Otázka ‚ s pouze pro konkrétní shell je bash , ale mám pocit, že váš kód není
bash
. - @manatwork: promiň, zapomněl jsem zmínit, že to byl Zsh. Aktualizován můj příspěvek.
Odpověď
Jen mě zajímalo to samé. Mám svůj vlastní přístup, ale hledám alternativy.
Píšu bash wrappery kolem programových volání a jejich výstup předvádím sed
. Co se mi líbí sed
spočívá v tom, že okamžitě upraví a ozvěnou každý řádek => není příliš vyrovnávací paměti. Nelíbí se mi však, že u každého volání zabaleného programu sed
kód je analyzován a zkompilován.
Například to je to, co dělám pro vybarvení výstupu 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"
Odpověď
Pro nastavení výzvy to mám ve svém souboru .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
Zobrazí se výzva, která vypadá přibližně takto:
user@host(bash): ~/bin >
Pracovní adresář je zelený . A uživatelské jméno je tučné a azurové, pokud jsem nespustil shell s sudo
, v takovém případě se uživatelské jméno („root“) zobrazí tučně a červeně.
Osobně se mi opravdu líbí mít řídicí znaky formátování uložené v proměnných, protože to usnadňuje čtení kódu pro nastavení výzvy. Také usnadňuje úpravy výzvy mnohem .
Důvod, proč používám tput
, je ten, že by měla být podporována univerzálněji než divné 033[01;31m\]
sekvence. Jako bonus navíc platí, že pokud na výzvu uděláte echo $PS1
, uvidíte surovou výzvu s barvy místo těchto nesrozumitelných kontrolních sekvencí.
Odpovědět
Můžete vyzkoušet projekt, který pomáhá také s výzdobou skriptů, pojmenovaný ScriptEchoColor u zdroje forge: http://scriptechocolor.sourceforge.net/
např .:
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
Automatické barvy jsou konfigurovatelné.
Toto je příklad provedený s ním:
odpověď
Skvělý univerzální Python nástroj pro vybarvení výstupu příkazů je „ colout „
Dáte mu regulární výraz s N skupinami, následovaný čárkami odděleným seznamem N barev. Jakýkoli text, který odpovídá skupině, se zobrazí v odpovídající barvě.
Takže například pokud se díváte na nějaký testovací výstup:
python -m unittest discover -v
pak jej můžete smrkovat nahoru s:
python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold
Podívejte se, jak má můj regulární výraz tři skupiny (závorky) následované třemi barvami (a volitelně třemi styly, ale k nastavení všech barev na „tučné“ jsem použil zkratku. , takže skupina „černá“, která odpovídá textu v závorkách, vychází jako tmavě šedá.)
Všimněte si také, jak jsem musel na konec přidat 2>&1
vyvolání Pythonu, protože výstup unittestu je na stderr, takže jsem ho přenesl do stdout, abych ho mohl převést do colout.
Toto je obecně tak snadné, že se často ocitám ve vytváření nových barevný faktur ionty on-the-fly, a jejich opětovné použití nebo úpravy z mé historie příkazového řádku.
Jedinou nevýhodou je, že přichází jako balíček Pythonu, nikoli jako samostatný spustitelný soubor, takže je třeba nainstalovat pomocí pipu nebo sudo python setup.py install
.
Odpovědět
Považuji Solarized za užitečné. Je to elegantní projekt s jednotnými barvami pro mnoho aplikací.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
Odpověď
Můžete použít můj cf pro zbarvení názvu souboru na příkazovém řádku, je to rychlý malý obarvovač založený na awk, který funguje pomocí potrubí – zbarvení názvů souborů v Truecolor sRGB.
Má pestrobarevné výchozí konfigurace a na rozdíl od ls neutrpí výkonnostní trest za přidání nových barev. (Pro každou miss musím skenovat celý řetězec LS_COLORS).
https://github.com/AdamDanischewski/cf
odpověď
Pro Mac můžete použít následující, jak je uvedeno zde
if [ "$TERM" = xterm ]; then TERM=xterm-256color; fi
Odpověď
Používám obálku barev .
cw je neotravující barevný obal ANSI v reálném čase pro běžné unixové příkazy v GNU / linuxu. cw je navržen tak, aby simuloval prostředí prováděných příkazů, takže pokud osoba zadá do svého prostředí „du“, „df“, „ping“ atd., automaticky vybarví výstup v reálném čase podle definice soubor obsahující požadovaný barevný formát. cw má podporu pro vybarvení shody zástupných znaků, tokenizované vybarvení, záhlaví / zápatí, vybarvení scénáře případu, vybarvení definice závislé na příkazovém řádku a obsahuje více než 50 předem připravených definičních souborů.
Je to téměř bezproblémové, ale jakmile jsem zjistil, že ps v interaktivním prostředí vrací jiný výstup porovnávající ps v potrubí.
Odpověď
Pokud chcete, aby vaše vim
byla stejně barevná jako já, navrhuji vám provést dva kroky:
- naučit se, jak zapnout funkci kliknutím na tento odkaz: zapnout zvýraznění syntaxe barev ve vi nebo vim .
klíčové kroky v odkazu:
Upravte soubor ~ / .vimrc zadáním příkazu: vi ~ /.vimrc
Připojit následující možnost: syntaxe
Uložte a zavřete soubor
Vyzkoušejte to spuštěním příkazu vim: vim foo.sh
- najděte barevné schéma, které se vám líbí, a použijte jej. Schéma, které používám: schéma, které používám
Komentáře
- Při použití odkazů na externí zdroj byste měli zkontrolovat část “ Poskytnout kontext pro odkazy “ (citovat důležité části) příslušné části průvodce: unix.stackexchange.com/help/how-to-answer
Odpovědět
Pokud je vaším výběrem bash, doporučuji oh-my-bash . Pokud je vaším výběrem zsh, doporučuji oh-my-zsh . Oba podporují zbarvení vašeho terminálu a odlišný výstup.
Odpověď
Chtěl bych pokorně inzerovat moji poslední publikaci z ta
nebo textattr , nástroje pro knihovnu a příkazový řádek jehož cílem je usnadnit přidávání barev a atributů ke zkrášlení terminálového výstupu vašeho programu převedením specifik čitelných člověkem do únikových kódů ANSI.
Například:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
nebo ještě kratší:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
nebo alternativní:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
vám dá něco jako:
V současné době je tato knihovna použitelná ze čtyř jazyků C, C ++, D a Python kromě použití příkazového řádku z vašeho oblíbeného prostředí .
Všimněte si, že automaticky nezbarví výstup žádných jiných programů. Je to spíše nástroj, který vám pomůže aving pamatovat si ty obtěžující kódy. Musíte použít pouze zřejmé názvy barev nebo jejich snadno zapamatovatelné rgb cmyk w (hite) (of) f zkratky.
Další informace najdete v textovém repo .
column -t --color
?