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:
- Jai tendance à définir
TERM=xterm-color
, qui est pris en charge sur la plupart des hôtes (mais pas tous). - 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.
- Je fais beaucoup de travail en utilisant GNU
screen
, ce qui ajoute une autre couche de plaisir. - 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. -
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
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 .
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, jutiliseLSCOLORS=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 chargeps
par défaut. Je ‘ être intéressé par vos colorisnmap
. 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 à:
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 partiepwd 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
- Les couleurs sont disponibles pour
ls
sur OS X, mais cela se fait en utilisantexport CLICOLOR=1
. - @ThomasW mais pas sous linux :-p Le gars utilise les deux.
- Néanmoins, ThomasW a raison de souligner que la réponse est erronée en disant que les couleurs ne sont pas disponibles avec
ls
sur MacOS 10. La réponse est également erronée en ce que le les chaînes dinvite ici sont en fait défectueuses. Ils ne équilibrent pas correctement\[
et\]
, et ont causé des problèmes pour au moins une personne copiant cette réponse .
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
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 quels -G
en utilisant BSD (ls -g
sur les BSD plus anciens). Sils --color
fonctionne (pas derreur), vous ‘ utilisez GNU ‘ sls
et$CLICOLOR
sont ignorés. - @SimonC. – Vous devez réellement charger votre
~/.bashrc
pour que les modifications prennent effet. Exécutezsource ~/.bashrc
ou démarrez une nouvelle session bash (lancez un terminal ou exécutezbash
).
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
- Ou si vous souhaitez utiliser ZSH, Phil Gold Linvite de ‘ à aperiodic.net/phil/prompt est une œuvre dart.
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
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!
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:
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 dernierfi
, 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:
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
alors vous pouvez la peaufiner avec:
python -m unittest discover -v 2>&1 | colout "(.*ERROR$)|(.*FAIL$)|(\(.*\))" red,yellow,black bold
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
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:
- apprenez à lactiver la fonctionnalité en suivant ce lien: activer la coloration syntaxique des couleurs dans vi ou vim .
étapes clés dans le lien:
Modifiez le fichier ~ / .vimrc en tapant la commande: vi ~ /.vimrc
Ajoutez loption suivante: syntaxe sur
Enregistrez et fermez le fichier
Testez-le en exécutant la commande vim: vim foo.sh
- 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:
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 .
column -t --color
?