Coloriser votre environnement terminal et shell?

Je passe la plupart de mon temps à travailler dans des environnements Unix et à utiliser des émulateurs de terminaux. Jessaie dutiliser la couleur sur la ligne de commande, car la couleur rend la sortie plus utile et intuitive.

Quelles options existent pour ajouter de la couleur à mon environnement de terminal? Quelles astuces utilisez-vous? Quels pièges avez-vous rencontrés?

Malheureusement, la prise en charge de la couleur varie en fonction du type de terminal, du système dexploitation, du paramètre TERM, de lutilitaire, des implémentations de bogues, etc.

Voici quelques conseils de ma configuration , après beaucoup dexpérimentation:

  1. Jai tendance à définir TERM=xterm-color, qui est pris en charge sur la plupart des hôtes (mais pas tous).
  2. Je travaille sur un certain nombre dhôtes différents, différentes versions dOS, etc. Jutilise tout de macOS X, Ubuntu Linux, RHEL / CentOS / Scientific Linux et FreeBSD. Jessaye de garder les choses simples et génériques, si possible.
  3. Je fais beaucoup de travail en utilisant GNU screen, ce qui ajoute une autre couche de plaisir.
  4. De nombreux systèmes dexploitation définissent des choses comme dircolors et par défaut, et je ne veux pas modifier cela sur une centaine dhôtes différents. Jessaye donc de men tenir aux valeurs par défaut. À la place, je modifie la configuration des couleurs de mon terminal.
  5. Utilisez la couleur pour certaines commandes Unix (ls, grep, less, vim) et Invite Bash . Ces commandes semblent utiliser les séquences déchappement standard «  ANSI « . Par exemple:

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

Je « publierai mon .bashrc et répondrai à ma propre question Jeopardy Style .

Commentaires

  • fyi mon approche (voir la réponse ci-dessous) résout les problèmes avec les différences OSX et Linux, par exemple la couleur sur lun est ls -G et de lautre, ls –color-auto
  • Est-ce que quelquun a vu un outil pour colorer les colonnes? Cest une column -t --color?

Réponse

Voici une deux choses que vous pouvez faire:

Editeurs + Code
De nombreux éditeurs ont une syntaxe mettre en évidence le soutien. vim et emacs lont activé par défaut. Vous pouvez également lactiver sous nano .

Vous pouvez également mettre en évidence le code de syntaxe sur le terminal en utilisant Pygments comme outil de ligne de commande.

grep
grep --color=auto met en évidence toutes les correspondances. Vous pouvez également utiliser export GREP_OPTIONS="--color=auto" pour le rendre persistant sans alias. Si vous utilisez --color=always, il « ll utilisera la couleur même lors du passepoil , ce qui complique les choses.

ls

ls --color=always

Couleurs spécifiées par:

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

(indice: dircolors peut être utile)

PS1
Vous pouvez configurer votre PS1 (invite du shell) pour utiliser des couleurs. Par exemple:

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

Produira une PS1 comme:

[jaune] lucas @ ubuntu: [rouge] ~ [normal] $

Vous pouvez faire preuve de beaucoup de créativité avec cela. En guise didée:

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

Place une barre en haut de votre terminal avec des informations aléatoires. (Pour de meilleurs résultats, utilisez également alias clear="echo -e "\e[2J\n\n"".)

Se débarrasser des séquences déchappement

Si quelque chose est bloqué en sortie de couleur alors que vous ne le voulez pas, jutilise ceci sed ligne pour supprimer les séquences déchappement:

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

Si vous voulez une expérience plus authentique, vous pouvez également vous débarrasser des lignes commençant par \e[8m, qui demande au terminal de masquer le texte. (Pas largement pris en charge.)

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

Notez également que ces ^ [s doivent être réels, littéraux ^ [s. Vous pouvez les saisir en appuyant sur ^ V ^ [en bash, cest-à-dire Ctrl + V , Ctrl + [ .

Commentaires

  • La première ligne PS1 doit se lire comme suit: PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '. Il y a un x superflu après la quatrième barre oblique inverse.
  • Les échappements doivent être inclus dans \[...\] sinon les commandes de la deuxième ligne écraseront la première ligne. PS1 = ‘ [ \ e [33; 1m ] \ u @ \ h: [ \ e [31m ] \ W \ e [0m \ $ ‘
  • Le ls --color=always ne fonctionne ‘.Lapproche de @Michael Durrant ‘ est meilleure pour cela: ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'

Réponse

Jutilise aussi:

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

Et si vous aimez coloriser votre invite, les variables de couleur définies peuvent être utile:

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" 

Et puis mon invite est quelque chose comme ceci:

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) appelle un script python dans mon ~ / sbin qui imprime les informations de contrôle de version sur le chemin actuel. Il inclut le support pour Mercurial, Git, Svn, Cvs, etc. Lauteur du script a la source ici .

Capture décran de linvite Bash

Voici le source complète de ma configuration dinvite:

Commentaires

  • Voir ici pour la solution à un problème de ligne que jai rencontré lorsque jai utilisé ce qui précède PS1: stackoverflow.com/questions/5087036/…
  • I ‘ a mis à jour la réponse pour refléter les parenthèses échappées pour les couleurs de linvite. Merci!
  • $LSCOLORS et $CLICOLOR sont pour BSD ls. GNU ls (Linux) utilise $LS_COLORS avec une syntaxe différente. Comme GNU me semble chez moi, jutilise LSCOLORS=exgxfxDacxBaBaCaCaeaEa pour imiter les couleurs de GNU ‘ sur BSD.
  • grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
  • Vous devrez peut-être vous procurer le fichier .bashrc pour que la modification soit effective. Vous pouvez le faire avec la commande suivante. source /path/to/.bashrc

Réponse

grep et ls ont déjà été mentionnés, si vous voulez beaucoup plus de couleurs, consultez Coloriseur générique , son objectif initial était de coloriser les fichiers journaux, mais dès la sortie de la boîte, il colorise également ping, traceroute, gcc, make, netstat, diff, last, ldap et cvs.

Il est facilement étendu si vous je connais les expressions régulières. Jai ajouté ps et nmap à la liste (si vous entrez dans grc Je serai plus quheureux de partager les fichiers .conf pour ces deux outils)

(Btw, pour linstaller via synaptic, pacman, et vous aurez peut-être plus de chance de chercher pour « grc »)

Commentaires

  • grc prend désormais en charge ps par défaut. Je ‘ être intéressé par vos coloris nmap. Voir aussi ma réponse pour aliaser tout cela dune manière qui absorbera les nouvelles commandes lorsque vous mettrez à niveau grc.
  • Jai remarqué cela. ici ‘ s ma conf.nmap (et tout le reste, vraiment) gist.github.com/sygo/844982#file-conf -nmap – Jai remarqué que vous travaillez dans infosec, vous pourriez trouver conf.hexdump intéressant, je nai ‘ pas encore fini.
  • Merci @Sygo. Jai ‘ bifurqué et révisé votre essence. Je ‘ je nai jamais réellement validé de données avec git (sans parler de github ‘ s gists) et je ne peux pas comprendre comment proposer de les fusionner à vous (je ‘ je suppose que cest parce que lessentiel est trop simplifié).
  • Je suppose que vous pouvez ‘ t parce quil ‘ est essentiel et non un référentiel approprié. Jai vérifié votre fourchette et je ‘ je vais définitivement essayer votre version. Je ‘ je suis curieux de savoir en quoi ce vidage hexadécimal va devenir …

Réponse

Jai perfectionné mon .bashrc au fil des ans pour quil fonctionne à la fois sur OSX et Ubuntu.
Je « lai également réduit en taille à 28 lignes avec des instructions de condition compactes.
Avec lui , mon invite PS1 ressemble à: entrez la description de limage ici

avec lheure en rouge, le nom dutilisateur en vert, le nom de la machine en bleu clair, pwd en bleu plus foncé et branche git en jaune.

Fonctionnalité de mon invite PS1:

  • montre la branche git!
  • les longs chemins de répertoire (plus de 6 éléments) sont  » trimmed « pour afficher les 3 premiers et 3 derniers répertoires avec _ entre les deux (cest » la partie pwd sed de LOCATION).
  • retour chariot à la fin pour que linvite soit toujours à gauche!

Les lignes pertinentes de mon fichier .bashrc sont:

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

Pour les ls avec des couleurs lorsque disponible un d aucune erreur si non (c.-à-d.OSX):

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

Commentaires

Réponse

Couleurs des pages de manuel ( plus de détails ):

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

Couleurs pour grep (1;32 est vert clair, voir les autres articles ici pour dautres couleurs):

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" 

Plus de couleurs pour 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 

Installer grc ( Coloration générique ) et ajoutez-le à vos alias:

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

Couleurs pour diff : Trop de contenu pour une fonction, utilisez un script et alias-le dans votre fichier rc (inutile si vous avez installé 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; 

Couleurs pour invite bash :

# 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 

démo de linvite bash

Commentaires

  • Voter pour une capture décran
  • Ma fonction PSWD() était auparavant compatible POSIX, mais elle ‘ est tellement plus facile facilitée en utilisant la gestion des sous-chaînes bash / zsh. Voir révision 6 pour la version POSIX, qui implique beaucoup de points dinterrogation et nétait pas ‘ t du tout adaptable au terminal largeur. Je nai ‘ mis à jour la capture décran, mais ‘ nest quun léger changement à la largeur de 80 caractères.
  • CLICOLOR=1 ne ‘ t fonctionne pour moi avec FREEBSD 11.2
  • @SimonC. – Vous utilisez peut-être des utilitaires GNU sur votre système FreeBSD plutôt que ceux de BSD. CLICOLOR=1 ls devrait faire la même chose que ls -G en utilisant BSD (ls -g sur les BSD plus anciens). Si ls --color fonctionne (pas derreur), vous ‘ utilisez GNU ‘ s ls et $CLICOLOR sont ignorés.
  • @SimonC. – Vous devez réellement charger votre ~/.bashrc pour que les modifications prennent effet. Exécutez source ~/.bashrc ou démarrez une nouvelle session bash (lancez un terminal ou exécutez bash).

Réponse

Définissez une invite en gras / en couleur. De cyberciti.biz et du 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 \$ " 

Jai également réussi à trouver des paramètres de couleur qui sont largement pris en charge, et qui nimpriment pas de caractères gobbledygook dans des environnements plus anciens (même FreeBSD4!), et semblent fonctionner correctement si TERM = vt100, xterm , xterm-couleur. (Pour la plupart). De mon .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 

Commentaires

Réponse

Ce qui na pas déjà été dit ici:

Pour coloriser la sortie de vos compilations avec gcc , il y a colorgcc de Johannes Schlüter

Pour coloriser les logs, il y a multitail

Pour coloriser nimporte quel stdout, jai assemblé xcol

exemple xcol

Jutilise personnellement ceux-ci de loutil 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 

Jutilise ces variables dans mes scripts comme ça

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

Jaime aussi cette petite fonction colourEcho (trouvée sur 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 

Désolé, pas autorisé à poster plus de liens

Commentaires

  • Bonjour, comment faites-vous les drapeaux, pour le chemin de linvite? Je mentionne les barres rectangulaires avec des extrémités triangulaires. Merci
  • Est-ce que cela fonctionne également dans un terminal ubuntu gnu?
  • lnav est également un excellent outil pour afficher les fichiers journaux colorisés

Réponse

Il « existe un bon outil pour configurer vos couleurs pour la commande ls – http://geoff.greer.fm/lscolors/

Réponse

Je vous suggère de consulter ZSH et son plugin oh-my-zsh qui possède lune des fonctionnalités de console les plus puissantes que jai vues. Lune delles est de choisir un thème pour votre terminal. Ceci est un exemple de mon thème … En tty les couleurs ne sont pas si chaudes mais elles sont les mêmes que sur cette image … De toute façon vous allez ladorer!

entrez la description de limage ici

Commentaires

  • Si je pouvais, je voterais contre Oh-My-ZSH suggestion. En tant quingénieur système qui travaille beaucoup dans le terminal et en tant que personne qui a essayé dadopter zsh / oh-my-zsh dans mon flux de travail, je Je peux honnêtement dire que je ne recommanderais jamais ZSH à personne. Bien sûr, vous pouvez créer un lien symbolique zsh vers un fichier nommé daprès nimporte quel autre shell et émuler ce shell, mais lorsque vous faites cela, ‘ ne lit pas votre .bashrc, .bash_profile, etc. , vous ne pouvez pas mettre emulate bash dans vos fichiers .zprofile ou .zshrc. Pour quiconque travaille avec des fonctionnalités avancées de BASH, il existe de nombreuses subtilités qui vous mordront. BASH est un meilleur sh.
  • La seule chose que ZSH a prête à lemploi qui est meilleure que BASH est lachèvement des commandes, mais même cela est programmable dans BASH. Peut-être que quelquun qui ‘ nutilise pas le shell sauf pour des tâches banales occasionnelles devrait adopter ZSH, mais cela ‘ nest pas pour quiconque en a besoin utiliser le shell de manière intensive. lopérateur =~ peut vous mordre, la façon dont ZSH gère les tableaux peut vous mordre, etc. Après avoir utilisé ZSH / Oh-My-ZSH pendant environ 9 mois, jen ai eu assez. Jutilisais un thème personnalisé que jai écrit moi-même, je lai porté sur BASH et jai écrit ma propre ligne dinvite git et je ‘ nai jamais regardé en arrière. Maintenant, je ne me soucie plus de la portabilité
  •  » il possède lune des fonctionnalités de console les plus puissantes que jai vues. Lun deux est de choisir le thème de votre terminal.  »
  • @JonathanHartley, votre commentaire semble être incomplet. ?
  • Merci pour votre inquiétude mais mon commentaire dit tout ce que je voulais dire.

Réponse

Pour afficher la sortie diff en couleur, utilisez colordiff .

sudo apt-get install colordiff 

Pipe toute sortie au format diff dans colordiff:

sortie de diff redirigée vers colordiff

Ceci inclut certains des formats alternatifs de diff, comme -y (côte à côte.)

Alternativement, sil est invoqué en mode autonome ( sans rien y faire passer) alors il agit comme un wrapper autour de « diff », et colore la sortie. Par conséquent, jai ceci dans mon .bashrc, pour alias « diff » en colordiff.

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

Commentaires

  • Lexemple .bashrc ne contient pas le dernier fi, et pourrait être converti en une commande sur une seule ligne: type colordiff &> /dev/null && alias diff='colordiff'

Réponse

Une décoration de texte (gras) pour différencier facilement le shell racine et non racine. Pour Zsh:

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

Pour Bash:

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

Commentaires

  • Veuillez spécifier votre shell. La seule balise spécifique au shell de la question ‘ est bash , mais je pense que votre code nest pas bash.
  • @manatwork: désolé, jai oublié de mentionner que cétait Zsh. Jai mis à jour mon message.

Réponse

Je me suis simplement demandé la même chose. Jai ma propre approche, mais je « cherche des alternatives.

Jécris des wrappers bash autour des appels de programme et je dirige leur sortie via sed. Ce que jaime dans sed est quil modifiera et fera écho à chaque ligne tout de suite => pas beaucoup de mise en mémoire tampon. Cependant, je naime pas que pour chaque appel à un programme enveloppé, le sed le code est analysé et compilé.

Par exemple, voici ce que je fais pour colorer la sortie de 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" 

Réponse

Pour définir linvite, jai ceci dans mon fichier .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 

Cela me donne une invite qui ressemble à ceci:

user@host(bash): ~/bin > 

Le répertoire de travail est en vert . Et le nom dutilisateur est en gras et cyan sauf si jai exécuté le shell avec sudo, auquel cas le nom dutilisateur (« root ») saffiche en gras et en rouge.

Personnellement, jaime beaucoup que les caractères de contrôle de mise en forme soient stockés dans des variables car cela facilite la lecture du code pour définir linvite. Cela rend également la modification de linvite beaucoup plus facile.

La raison pour laquelle jutilise tput est quelle est censée être plus universellement prise en charge que les étranges séquences 033[01;31m\]. De plus, en prime, si vous faites echo $PS1 à linvite, vous verrez linvite brute avec couleurs au lieu de ces séquences de contrôle inintelligibles.

Réponse

Vous pouvez essayer un projet qui aide également à coloriser la sortie des scripts, son nommé ScriptEchoColor à la source forge: http://scriptechocolor.sourceforge.net/

ex .:

echoc "@{lr}text output in light red" echoc "@{bLGu}text outpus in blue, light green background and underlined" echoc "you @{lr} can @{bLGu} mix @{-a} it all too" echoc -x "ls" #executes ls command and colorizes it automatically to be easy to be seen 

Les couleurs automatiques sont configurables.

Ceci est un exemple fait avec: entrez la description de limage ici

Réponse

Un excellent outil Python à usage général pour colorer la sortie des commandes est «  colout « 

Vous lui donnez une regex avec N groupes, suivi dune liste de N couleurs séparées par des virgules. Tout texte correspondant à un groupe sera affiché dans la couleur correspondante.

Par exemple, si vous « regardez une sortie de test:

python -m unittest discover -v 

Sortie non colorée de certains unittests Python

alors vous pouvez la peaufiner avec:

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

Sortie colorée de certains unittests Python

Voyez comment mon expression régulière a trois groupes (les parenthèses) suivis de trois couleurs (et éventuellement de trois styles, mais jai « utilisé un raccourci pour définir toutes les couleurs en » gras  » , donc le groupe « noir », qui correspond au texte entre crochets, apparaît en gris foncé.)

Notez aussi comment jai dû ajouter 2>&1 à la fin de linvocation Python, car la sortie de unittest est sur stderr, je lai donc transférée vers stdout pour pouvoir la diriger vers colout.

Cest généralement si facile à utiliser que je me surprends souvent à créer de nouvelles invocat colout ions à la volée, et en les réutilisant ou en les modifiant à partir de mon historique de ligne de commande.

Le seul inconvénient est quil se présente sous la forme dun package Python, et non dun exécutable autonome, vous devez donc installer en utilisant pip, ou sudo python setup.py install.

Answer

Je trouve Solarized utile. Cest un projet soigné avec des couleurs uniformes pour de nombreuses applications.

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

Réponse

Vous pouvez utiliser my cf pour la coloration des noms de fichiers sur la ligne de commande, cest un petit coloriseur rapide basé sur awk qui fonctionne via des tuyaux – colorant les noms de fichiers dans Truecolor sRGB.

Il a une couleur vive configuration par défaut et contrairement à ls, il ne subit pas de pénalité de performances pour lajout de nouvelles couleurs. (ls doit scanner toute la chaîne LS_COLORS pour chaque échec).

https://github.com/AdamDanischewski/cf

cf utilisation

cf capture décran

Réponse

Pour Mac, vous pouvez utiliser ce qui suit comme spécifié ici

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

Réponse

Jutilise emballage de couleur .

cw est un wrapper de couleurs ANSI en temps réel non intrusif pour les commandes courantes basées sur Unix sur GNU / linux. cw est conçu pour simuler lenvironnement des commandes en cours dexécution, de sorte que si une personne tape « du », « df », « ping », etc. dans leur shell, elle colorera automatiquement la sortie en temps réel selon une définition fichier contenant le format de couleur souhaité. cw prend en charge la coloration des correspondances génériques, la coloration symbolique, les en-têtes / pieds de page, la coloration des scénarios, la coloration des définitions dépendant de la ligne de commande et comprend plus de 50 fichiers de définition prédéfinis.

Cest presque transparent, mais une fois que jai trouvé que ps dans le shell interactif renvoie une sortie différente en comparant ps dans un tube.

Réponse

si vous voulez rendre votre vim coloré comme moi, je vous suggère de suivre deux étapes:

  1. apprenez à lactiver la fonctionnalité en suivant ce lien: activer la coloration syntaxique des couleurs dans vi ou vim .

étapes clés dans le lien:

  1. Modifiez le fichier ~ / .vimrc en tapant la commande: vi ~ /.vimrc

  2. Ajoutez loption suivante: syntaxe sur

  3. Enregistrez et fermez le fichier

  4. Testez-le en exécutant la commande vim: vim foo.sh

  1. trouvez un jeu de couleurs que vous aimez et utilisez-le. Le schéma que jutilise: le schéma que jutilise

Commentaires

  • Lorsque vous utilisez des liens vers une source externe, vous devez vérifier la partie  » Fournir un contexte pour les liens  » (citer les parties importantes) de la partie pertinente du guide: unix.stackexchange.com/help/how-to-answer

Réponse

Si bash est votre choix, je recommande oh-my-bash . Si zsh est votre choix, je recommande oh-my-zsh . Les deux prennent en charge la colorisation de votre terminal et différentes sorties.

Réponse

Je « voudrais humblement faire connaître ma publication récente de ta ou textattr , une bibliothèque et un outil de ligne de commande qui vise à faciliter lajout de couleurs et dattributs pour embellir la sortie du terminal de votre programme en traduisant des spécifications lisibles par lhomme en codes déchappement ANSI.

Par exemple:

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

ou encore plus court:

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

ou un autre:

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

vous donnera quelque chose comme:

entrez la description de limage ici

Actuellement, cette bibliothèque est utilisable à partir de quatre langages C, C ++, D et Python en dehors de lutilisation en ligne de commande de votre shell préféré .

Notez quil ne colore pas automatiquement la sortie des autres programmes. Cest plutôt un utilitaire pour vous aider à ne pas h aving de se souvenir des codes abstrus. Il vous suffit dutiliser les noms de couleurs évidents ou leur rgb cmyk w (hite) (of) f faciles à retenir abréviations.

Pour plus de détails, visitez le repo textattr .

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *