Bibliothèque de sortie de script shell coloré

Je cherche un moyen définitif de créer des scripts shell qui génèrent des résultats colorés.

Malheureusement, j’ai du mal à trouver une lib appropriée ou une bonne technique pour ce faire. J’ai trouvé beaucoup d’exemples utiles mais simples comme celui-ci . Le guide le plus complet que j’ai trouvé jusqu’à maintenant est celui-ci .

Avant de commencer à écrire ma propre bibliothèque, je veux vérifier si quelqu’un l’a déjà écrit

Si votre solution ne correspond pas aux observations ci-dessous, ce n’est pas un problème. Je voudrais aussi le lire pour qu’il puisse m’aider si je décide d’écrire ma propre solution

Mes principales préoccupations / observations:

  • Doit être en sécurité Vous voulez éviter les pertes de données car tous les terminaux, les pagers / éditeurs (comme less, more, vim, etc.) ne prennent pas en charge les sorties en couleur ou plus de style (gras, clignotant, italique, etc.)
  • Doit être facile et lisible . L’utilisation directe des codes d’échappement ANSI est horrible: echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
  • Doit me donner access à toute la palette de couleurs et aux styles pour le texte de premier plan et d’arrière-plan. La plupart des exemples que j’ai trouvés utilisent uniquement les couleurs de base pour le texte de premier plan.
  • Il est préférable d’utiliser uniquement des commandes simples telles que des commandes bash ou plus simples, des commandes intégrées et / ou des commandes courantes que l’on peut trouver sur la plupart des systèmes d’exploitation. Par exemple, je peux utiliser coloriser, mais j’aurais besoin de ruby ​​(c’est un peu ok) et de la gem colorize installée (pas ok)
  • Tput semble être une bonne option car il peut très bien manipuler le curseur du shell, mais il est un peu plus simple et moins flexible.

modifier

Après quelques recherches sur le contrôle des terminaux et le formatage des sorties, j’écris cet extrait qui essaie d’y parvenir. Jusqu’ici ça va très bien

Voici un extrait modifié de mes fichiers dotfiles qui devrait faire ce que vous voulez

 RCol='\e[0m' # Text Reset # Regular Bold Underline High Intensity BoldHigh Intens Background High Intensity Backgrounds Bla='\e[0;30m'; BBla='\e[1;30m'; UBla='\e[4;30m'; IBla='\e[0;90m'; BIBla='\e[1;90m'; On_Bla='\e[40m'; On_IBla='\e[0;100m'; Red='\e[0;31m'; BRed='\e[1;31m'; URed='\e[4;31m'; IRed='\e[0;91m'; BIRed='\e[1;91m'; On_Red='\e[41m'; On_IRed='\e[0;101m'; Gre='\e[0;32m'; BGre='\e[1;32m'; UGre='\e[4;32m'; IGre='\e[0;92m'; BIGre='\e[1;92m'; On_Gre='\e[42m'; On_IGre='\e[0;102m'; Yel='\e[0;33m'; BYel='\e[1;33m'; UYel='\e[4;33m'; IYel='\e[0;93m'; BIYel='\e[1;93m'; On_Yel='\e[43m'; On_IYel='\e[0;103m'; Blu='\e[0;34m'; BBlu='\e[1;34m'; UBlu='\e[4;34m'; IBlu='\e[0;94m'; BIBlu='\e[1;94m'; On_Blu='\e[44m'; On_IBlu='\e[0;104m'; Pur='\e[0;35m'; BPur='\e[1;35m'; UPur='\e[4;35m'; IPur='\e[0;95m'; BIPur='\e[1;95m'; On_Pur='\e[45m'; On_IPur='\e[0;105m'; Cya='\e[0;36m'; BCya='\e[1;36m'; UCya='\e[4;36m'; ICya='\e[0;96m'; BICya='\e[1;96m'; On_Cya='\e[46m'; On_ICya='\e[0;106m'; Whi='\e[0;37m'; BWhi='\e[1;37m'; UWhi='\e[4;37m'; IWhi='\e[0;97m'; BIWhi='\e[1;97m'; On_Whi='\e[47m'; On_IWhi='\e[0;107m'; 

Ensuite, vous pouvez simplement echo -e "${Blu}blue ${Red}red ${RCol}etc...."

echo -e “\ 033 [33; 31m couleur texte” – rouge

echo -e “\ 033 [33; 32m Color Text” – vert

echo -e “\ 033 [33; 33m Color Text” – jaune

echo -e “\ 033 [33; 34m couleur texte” – bleu

echo -e “\ 033 [Texte couleur 33; 35m” – Magenta

echo -e “\ 033 [33; 30m couleur texte” – gris

echo -e “\ 033 [33; 36m Color Text” – Cyan

http://techietent.blogspot.in/2013/03/how-to-echo-colored-text-in-linux-shell.html

J’ai pris la liste de Dure comme source d’inspiration et j’ai fait un peu de séchage. (Et changé \e en hexadécimal \x1B , puisque le premier n’est pas pris en charge dans Terminal.app d’OS X depuis Snow Leopard.) Voici ce que j’ai trouvé:

 ## Colours and font styles ## Syntax: echo -e "${FOREGROUND_COLOUR}${BACKGROUND_COLOUR}${STYLE}Hello world!${RESET_ALL}" # Escape sequence and resets ESC_SEQ="\x1b[" RESET_ALL="${ESC_SEQ}0m" RESET_BOLD="${ESC_SEQ}21m" RESET_UL="${ESC_SEQ}24m" # Foreground colours FG_BLACK="${ESC_SEQ}30;" FG_RED="${ESC_SEQ}31;" FG_GREEN="${ESC_SEQ}32;" FG_YELLOW="${ESC_SEQ}33;" FG_BLUE="${ESC_SEQ}34;" FG_MAGENTA="${ESC_SEQ}35;" FG_CYAN="${ESC_SEQ}36;" FG_WHITE="${ESC_SEQ}37;" FG_BR_BLACK="${ESC_SEQ}90;" FG_BR_RED="${ESC_SEQ}91;" FG_BR_GREEN="${ESC_SEQ}92;" FG_BR_YELLOW="${ESC_SEQ}93;" FG_BR_BLUE="${ESC_SEQ}94;" FG_BR_MAGENTA="${ESC_SEQ}95;" FG_BR_CYAN="${ESC_SEQ}96;" FG_BR_WHITE="${ESC_SEQ}97;" # Background colours (optional) BG_BLACK="40;" BG_RED="41;" BG_GREEN="42;" BG_YELLOW="43;" BG_BLUE="44;" BG_MAGENTA="45;" BG_CYAN="46;" BG_WHITE="47;" # Font styles FS_REG="0m" FS_BOLD="1m" FS_UL="4m" 

Les couleurs BR_ sont les couleurs “lumineuses” ou “à haute intensité”. Fait de cette façon, vous pouvez même les mélanger avec d’autres styles de police. (par ex. blanc shiny souligné)

Si vous voulez mettre ce signet dans vos favoris, je l’ai fait: https://gist.github.com/ian128K/39a490e5aa8d3bb77a8b

tput peut gérer plus que ce qui est indiqué sur la page à laquelle vous accédez. Tout tput fait tput est la sortie des caractères à inclure dans votre déclaration echo , en fonction de ce qui apparaît dans la firebase database termcap / terminfo du terminal actuel. Quelques exemples:

 $ tput setaf 5 | hexdump -C 00000000 1b 5b 33 35 6d |.[35m| $ tput setaf 17 | hexdump -C 00000000 1b 5b 33 38 3b 35 3b 31 37 6d |.[38;5;17m| $ tput reset | hexdump -C 00000000 1b 63 1b 5b 3f 31 30 30 30 6c 1b 5b 3f 32 35 68 |.c.[?1000l.[?25h| 

Vous l’utiliserez de la même manière que vous utilisez la variable définie dans votre liste; en fait, vous pouvez l’utiliser pour créer votre idée, de manière portable:

 black=$(tput setaf 0) 

Fiche sans vergogne … vérifier Rainbow.sh

Usage

Importez simplement rainbow.sh et commencez à utiliser les fonctions disponibles dans vos scripts.

 source rainbow.sh vargreen=$(echogreen "Grass is green") varred=$(echored "Roses are red") echo "$vargreen ..Crickets are noisy.. $varred" 

entrer la description de l'image ici

Je les utilise personnellement dans mon outil xcol que j’ai développé en utilisant le code Andreas Schamanek comme référence.

 #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 

J’utilise ces variables dans mes scripts comme ça

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

Commander mon outil xcol pour des idées et des exemples

https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/

exemple de xcol