mac - linux change color of prompt
Biblioteca de salida de script de color (6)
Aquí hay un fragmento modificado de mis dotfiles que debe hacer lo que quieras
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'';
Entonces puedes hacer echo -e "${Blu}blue ${Red}red ${RCol}etc...."
Estoy buscando una forma definitiva de crear scripts de shell que genere resultados en color.
Lamentablemente, estoy teniendo dificultades para encontrar una lib adecuada o una buena técnica para hacer esto. Encontré muchos ejemplos útiles pero simples como this . También la guía más completa que encontré hasta ahora es esta .
Antes de comenzar a escribir mi propia biblioteca, quiero verificar si alguien ya la escribió
Si su solución no encaja en las observaciones a continuación, eso no es un problema. También me gustaría leerlo para que pueda ayudarme si decido escribir mi propia solución
Mis principales preocupaciones / observaciones:
- Necesita estar seguro . Desea evitar la salida de basura, ya que no todas las terminales o localizadores / editores (como less, more, vim, etc.) admiten salida de color o salida con más estilo (negrita, parpadeado, cursiva, etc.)
- Necesita ser fácil y legible . Usar códigos de escape ANSI directamente es horrible:
echo -e ''/033[32mthis is ugly and /033[1;32mvery green/033[0m''
- Necesita darme acceso a toda la paleta de colores y estilos para el texto de fondo y de fondo. La mayoría de los ejemplos que encontré usan solo los colores básicos para texto de primer plano solamente.
- Es preferible usar solo comandos simples como bash o shells más simples integrados en comandos y / o comandos comunes que se pueden encontrar en la mayoría de los sistemas operativos. Por ejemplo, puedo usar colorize pero necesitaría rubí (eso está bien) y la gema colorante instalada (no está bien)
- Tput parece ser una buena opción, ya que puede manipular el cursor del shell bastante bien, pero es algo más simple / menos flexible
Editar
Después de algunas investigaciones sobre el control de terminales y el formato de salida, escribo esta idea que trata de lograr esto. Hasta ahora lo está haciendo bastante bien
Enchufe desvergonzado ... Rainbow.sh
Uso
Solo importa rainbow.sh y comienza a usar las funciones disponibles en tus scripts.
source rainbow.sh
vargreen=$(echogreen "Grass is green")
varred=$(echored "Roses are red")
echo "$vargreen ..Crickets are noisy.. $varred"
Personalmente los uso en mi herramienta xcol que desarrollé usando el código de Andreas Schamanek como referencia.
#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
Utilizo estas variables en mis scripts como tal
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Revisa mi herramienta xcol para obtener ideas y ejemplos
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
Tomé la lista de recamadas como inspiración e hice un poco de DRYing. (Y cambió /e
al hexadecimal /x1B
, ya que el primero no es compatible con Terminal.app de OS X desde Snow Leopard). Esto es lo que se me ocurrió:
## 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"
Los colores BR_
son los colores "brillante" o "de alta intensidad". Hecho de esta manera, incluso puede mezclarlos con otros estilos de fuente. (por ejemplo, subrayado blanco brillante)
Si quieres marcar esto, hice una idea para ello: https://gist.github.com/ian128K/39a490e5aa8d3bb77a8b
echo -e "/ 033 [33; 31m Color Text" - rojo
echo -e "/ 033 [33; 32m Color Text" - verde
echo -e "/ 033 [33; 33m Color Text" - amarillo
echo -e "/ 033 [33; 34m Color Text" - azul
echo -e "/ 033 [33; 35m Color Text" - Magenta
echo -e "/ 033 [33; 30m Color Text" - Gris
echo -e "/ 033 [33; 36m Color Text" - Cyan
http://techietent.blogspot.in/2013/03/how-to-echo-colored-text-in-linux-shell.html
tput
puede manejar más de lo que se indica en la página a la que se vincula. Todo tput
hace es generar los caracteres que incluiría en su declaración de echo
, de acuerdo con lo que aparece en la base de datos termcap / terminfo de la terminal actual. Algunos ejemplos:
$ 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|
Lo usarías de la misma manera que usas la variable definida en tu esencia; de hecho, podrías usarlo para crear tu esencia, de manera portátil:
black=$(tput setaf 0)