mac color change linux macos shell colors

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



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)