bash - mac - Envasado de línea PS1 con problema de colores
set env (3)
Lo tengo, necesitaba escapar de los colores correctamente.
Fijar:
PS1=''/u:/W$(__git_ps1 "/[/e[32m/][%s]/[/e[0m/]")$ ''
Aquí está mi variable PS1:
PS1=''/u:/W$(__git_ps1 "/e[32m/][%s]/e[0m/]")$ ''
Funciona muy bien para recoger mi rama de Git, pero tiene el desafortunado efecto secundario de envolver las líneas cuando los colores están activos, de modo que se superponen cuando se usan comandos largos.
¿Alguien con habilidades mágicas de PS1 me puede ayudar a solucionar esto?
Puedo sugerir el siguiente método para los colores en Bash, hace que el código sea mucho más legible y mucho más difícil para que te pierdas uno o dos escapes.
Pon lo siguiente en tu ~ / .bashrc
BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
LIME_YELLOW=$(tput setaf 190)
YELLOW=$(tput setaf 3)
POWDER_BLUE=$(tput setaf 153)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BRIGHT=$(tput bold)
NORMAL=$(tput sgr0)
BLINK=$(tput blink)
REVERSE=$(tput smso)
UNDERLINE=$(tput smul)
Un ejemplo de PS1 (o realmente cualquier cosa que se imprima en la pantalla) sería:
PS1="/[${WHITE}/](/[${YELLOW}/]/u@/h/[${WHITE}/])/[${NORMAL}/]$ "
Solo necesita poner / [/] alrededor de las palabras de color.
Si tiene un terminal de 256 colores, puede experimentar con otros valores numéricos para ''tput setaf'' hasta 255.
Estas son las funciones de color que uso con regularidad ... las escribí hace años y me he acostumbrado tanto a ellas que forman parte de mi scripting. Simplemente inserte este bloque de código en su archivo .bashrc, inicie una nueva sesión y ¡ya está listo!
Los uso como reemplazos de printf coloridos / elegantes:
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ [ Aesthir''s Color Functions ] ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
Normal () { printf ''/e[m''"$*"; } ; Tblack () { printf ''/e[0;30m''"$*"''/e[m''; }
TNormal () { printf ''/e[m''"$*"; } ; Tred () { printf ''/e[0;31m''"$*"''/e[m''; }
Bold () { printf ''/e[1m''"$*"''/e[m''; } ; Tgreen () { printf ''/e[0;32m''"$*"''/e[m''; }
TBold () { printf ''/e[1m''"$*"''/e[m''; } ; Tbrown () { printf ''/e[0;33m''"$*"''/e[m''; }
Underline () { printf ''/e[4m''"$*"''/e[m''; } ; Tyellow () { printf ''/e[0;33m''"$*"''/e[m''; }
TUnderline () { printf ''/e[4m''"$*"''/e[m''; } ; Tblue () { printf ''/e[0;34m''"$*"''/e[m''; }
Flash () { printf ''/e[5m''"$*"''/e[m''; } ; Tmagenta () { printf ''/e[0;35m''"$*"''/e[m''; }
TFlash () { printf ''/e[5m''"$*"''/e[m''; } ; Tpurple () { printf ''/e[0;35m''"$*"''/e[m''; }
Invert () { printf ''/e[7m''"$*"''/e[m''; } ; Taqua () { printf ''/e[0;36m''"$*"''/e[m''; }
TInvert () { printf ''/e[7m''"$*"''/e[m''; } ; Tcyan () { printf ''/e[0;36m''"$*"''/e[m''; }
Invisible () { printf ''/e[8m''"$*"''/e[m''; } ; Tgrey () { printf ''/e[0;37m''"$*"''/e[m''; }
TInvisible () { printf ''/e[8m''"$*"''/e[m''; } ; Twhite () { printf ''/e[0;37m''"$*"''/e[m''; }
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ Bold Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞∞∞∞∞ Underlined Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
TblackB () { printf ''/e[1;30m''"$*"''/e[m''; } ; TblackU () { printf ''/e[4;30m''"$*"''/e[m''; }
TgreyB () { printf ''/e[1;30m''"$*"''/e[m''; } ; TredU () { printf ''/e[4;31m''"$*"''/e[m''; }
TredB () { printf ''/e[1;31m''"$*"''/e[m''; } ; TgreenU () { printf ''/e[4;32m''"$*"''/e[m''; }
TgreenB () { printf ''/e[1;32m''"$*"''/e[m''; } ; TbrownU () { printf ''/e[4;33m''"$*"''/e[m''; }
TbrownB () { printf ''/e[1;33m''"$*"''/e[m''; } ; TyellowU () { printf ''/e[4;33m''"$*"''/e[m''; }
TyellowB () { printf ''/e[1;33m''"$*"''/e[m''; } ; TblueU () { printf ''/e[4;34m''"$*"''/e[m''; }
TblueB () { printf ''/e[1;34m''"$*"''/e[m''; } ; TmagentaU () { printf ''/e[4;35m''"$*"''/e[m''; }
TmagentaB () { printf ''/e[1;35m''"$*"''/e[m''; } ; TpurpleU () { printf ''/e[4;35m''"$*"''/e[m''; }
TpurpleB () { printf ''/e[1;35m''"$*"''/e[m''; } ; TaquaU () { printf ''/e[4;36m''"$*"''/e[m''; }
TaquaB () { printf ''/e[1;36m''"$*"''/e[m''; } ; TcyanU () { printf ''/e[4;36m''"$*"''/e[m''; }
TcyanB () { printf ''/e[1;36m''"$*"''/e[m''; } ; TgreyU () { printf ''/e[4;37m''"$*"''/e[m''; }
TwhiteB () { printf ''/e[1;37m''"$*"''/e[m''; } ; TwhiteU () { printf ''/e[4;37m''"$*"''/e[m''; }
## ∞∞∞∞∞∞∞∞∞∞∞∞∞ Flashing Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞∞∞∞∞∞ Inverted Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
TblackF () { printf ''/e[5;30m''"$*"''/e[m''; } ; TblackI () { printf ''/e[7;40m''"$*"''/e[m''; }
TredF () { printf ''/e[5;31m''"$*"''/e[m''; } ; TredI () { printf ''/e[7;41m''"$*"''/e[m''; }
TgreenF () { printf ''/e[5;32m''"$*"''/e[m''; } ; TgreenI () { printf ''/e[7;42m''"$*"''/e[m''; }
TbrownF () { printf ''/e[5;33m''"$*"''/e[m''; } ; TbrownI () { printf ''/e[7;43m''"$*"''/e[m''; }
TyellowF () { printf ''/e[5;33m''"$*"''/e[m''; } ; TyellowI () { printf ''/e[7;43m''"$*"''/e[m''; }
TblueF () { printf ''/e[5;34m''"$*"''/e[m''; } ; TblueI () { printf ''/e[7;44m''"$*"''/e[m''; }
TmagentaF () { printf ''/e[5;35m''"$*"''/e[m''; } ; TmagentaI () { printf ''/e[7;45m''"$*"''/e[m''; }
TpurpleF () { printf ''/e[5;35m''"$*"''/e[m''; } ; TpurpleI () { printf ''/e[7;45m''"$*"''/e[m''; }
TaquaF () { printf ''/e[5;36m''"$*"''/e[m''; } ; TaquaI () { printf ''/e[7;46m''"$*"''/e[m''; }
TcyanF () { printf ''/e[5;36m''"$*"''/e[m''; } ; TcyanI () { printf ''/e[7;46m''"$*"''/e[m''; }
TgreyF () { printf ''/e[5;37m''"$*"''/e[m''; } ; TgreyI () { printf ''/e[7;47m''"$*"''/e[m''; }
TwhiteF () { printf ''/e[5;37m''"$*"''/e[m''; } ; TwhiteI () { printf ''/e[7;47m''"$*"''/e[m''; }
## ∞∞∞∞∞∞∞∞∞∞∞∞∞ Invisible Color Text ∞∞∞∞∞∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞ Plain Text on Color Background ∞∞∞∞∞∞∞∞ ##
TblackV () { printf ''/e[8;30m''"$*"''/e[m''; } ; Bblack () { printf ''/e[m''"$*"''/e[m''; }
TredV () { printf ''/e[8;31m''"$*"''/e[m''; } ; Bred () { printf ''/e[0;41m''"$*"''/e[m''; }
TgreenV () { printf ''/e[8;32m''"$*"''/e[m''; } ; Bgreen () { printf ''/e[0;42m''"$*"''/e[m''; }
TbrownV () { printf ''/e[8;33m''"$*"''/e[m''; } ; Bbrown () { printf ''/e[0;43m''"$*"''/e[m''; }
TyellowV () { printf ''/e[8;33m''"$*"''/e[m''; } ; Byellow () { printf ''/e[0;43m''"$*"''/e[m''; }
TblueV () { printf ''/e[8;34m''"$*"''/e[m''; } ; Bblue () { printf ''/e[0;44m''"$*"''/e[m''; }
TmagentaV () { printf ''/e[8;35m''"$*"''/e[m''; } ; Bmagenta () { printf ''/e[0;45m''"$*"''/e[m''; }
TpurpleV () { printf ''/e[8;35m''"$*"''/e[m''; } ; Bpurple () { printf ''/e[0;45m''"$*"''/e[m''; }
TaquaV () { printf ''/e[8;36m''"$*"''/e[m''; } ; Baqua () { printf ''/e[0;46m''"$*"''/e[m''; }
TcyanV () { printf ''/e[8;36m''"$*"''/e[m''; } ; Bcyan () { printf ''/e[0;46m''"$*"''/e[m''; }
TgreyV () { printf ''/e[8;37m''"$*"''/e[m''; } ; Bgrey () { printf ''/e[0;47m''"$*"''/e[m''; }
TwhiteV () { printf ''/e[8;37m''"$*"''/e[m''; } ; Bwhite () { printf ''/e[0;47m''"$*"''/e[m''; }
## ∞∞∞∞∞∞∞∞∞ Bold Text on Color Background ∞∞∞∞∞∞∞∞ ## ∞∞∞∞∞∞ Underlined Text on Color Background ∞∞∞∞∞ ##
BblackB () { printf ''/e[1;40m''"$*"''/e[m''; } ; BblackU () { printf ''/e[4;40m''"$*"''/e[m''; }
BredB () { printf ''/e[1;41m''"$*"''/e[m''; } ; BredU () { printf ''/e[4;41m''"$*"''/e[m''; }
BgreenB () { printf ''/e[1;42m''"$*"''/e[m''; } ; BgreenU () { printf ''/e[4;42m''"$*"''/e[m''; }
BbrownB () { printf ''/e[1;43m''"$*"''/e[m''; } ; BbrownU () { printf ''/e[4;43m''"$*"''/e[m''; }
ByellowB () { printf ''/e[1;43m''"$*"''/e[m''; } ; ByellowU () { printf ''/e[4;43m''"$*"''/e[m''; }
BblueB () { printf ''/e[1;44m''"$*"''/e[m''; } ; BblueU () { printf ''/e[4;44m''"$*"''/e[m''; }
BmagentaB () { printf ''/e[1;45m''"$*"''/e[m''; } ; BmagentaU () { printf ''/e[4;45m''"$*"''/e[m''; }
BpurpleB () { printf ''/e[1;45m''"$*"''/e[m''; } ; BpurpleU () { printf ''/e[4;45m''"$*"''/e[m''; }
BaquaB () { printf ''/e[1;46m''"$*"''/e[m''; } ; BaquaU () { printf ''/e[4;46m''"$*"''/e[m''; }
BcyanB () { printf ''/e[1;46m''"$*"''/e[m''; } ; BcyanU () { printf ''/e[4;46m''"$*"''/e[m''; }
BgreyB () { printf ''/e[1;47m''"$*"''/e[m''; } ; BgreyU () { printf ''/e[4;47m''"$*"''/e[m''; }
BwhiteB () { printf ''/e[1;47m''"$*"''/e[m''; } ; BwhiteU () { printf ''/e[4;47m''"$*"''/e[m''; }
## ∞∞∞∞∞∞∞ Flashing Text on Color Background ∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞ Inverted Text on Color Background ∞∞∞∞∞∞ ##
BblackF () { printf ''/e[5;40m''"$*"''/e[m''; } ; BblackI () { printf ''/e[7;30m''"$*"''/e[m''; }
BredF () { printf ''/e[5;41m''"$*"''/e[m''; } ; BredI () { printf ''/e[7;31m''"$*"''/e[m''; }
BgreenF () { printf ''/e[5;42m''"$*"''/e[m''; } ; BgreenI () { printf ''/e[7;32m''"$*"''/e[m''; }
BbrownF () { printf ''/e[5;43m''"$*"''/e[m''; } ; BbrownI () { printf ''/e[7;33m''"$*"''/e[m''; }
ByellowF () { printf ''/e[5;43m''"$*"''/e[m''; } ; ByellowI () { printf ''/e[7;33m''"$*"''/e[m''; }
BblueF () { printf ''/e[5;44m''"$*"''/e[m''; } ; BblueI () { printf ''/e[7;34m''"$*"''/e[m''; }
BmagentaF () { printf ''/e[5;45m''"$*"''/e[m''; } ; BmagentaI () { printf ''/e[7;35m''"$*"''/e[m''; }
BpurpleF () { printf ''/e[5;45m''"$*"''/e[m''; } ; BpurpleI () { printf ''/e[7;35m''"$*"''/e[m''; }
BaquaF () { printf ''/e[5;46m''"$*"''/e[m''; } ; BaquaI () { printf ''/e[7;36m''"$*"''/e[m''; }
BcyanF () { printf ''/e[5;46m''"$*"''/e[m''; } ; BcyanI () { printf ''/e[7;36m''"$*"''/e[m''; }
BgreyF () { printf ''/e[5;47m''"$*"''/e[m''; } ; BgreyI () { printf ''/e[7;37m''"$*"''/e[m''; }
BwhiteF () { printf ''/e[5;47m''"$*"''/e[m''; } ; BwhiteI () { printf ''/e[7;37m''"$*"''/e[m''; }
## ∞∞∞∞∞∞ Invisible Text on Color Background ∞∞∞∞∞∞ ## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ Color Code Notes ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
BblackV () { printf ''/e[8;40m''"$*"''/e[m''; } ## Unless I missed something or made a mistake, I ##
BredV () { printf ''/e[8;41m''"$*"''/e[m''; } ## calculate a total of 7681 different color codes, ##
BgreenV () { printf ''/e[8;42m''"$*"''/e[m''; } ## none of which produce a duplicate result. ##
BbrownV () { printf ''/e[8;43m''"$*"''/e[m''; } ## These will be fine for now. ##
ByellowV () { printf ''/e[8;43m''"$*"''/e[m''; }
BblueV () { printf ''/e[8;44m''"$*"''/e[m''; }
BmagentaV () { printf ''/e[8;45m''"$*"''/e[m''; }
BpurpleV () { printf ''/e[8;45m''"$*"''/e[m''; }
BaquaV () { printf ''/e[8;46m''"$*"''/e[m''; }
BcyanV () { printf ''/e[8;46m''"$*"''/e[m''; }
BgreyV () { printf ''/e[8;47m''"$*"''/e[m''; }
BwhiteV () { printf ''/e[8;47m''"$*"''/e[m''; }
## ∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞ ##
``
Lo único que debe tener en cuenta es que cuando desea un signo de porcentaje %
o una /
barra diagonal inversa, debe duplicarlas en el interior:
como: printf "$(Tblue "%%s")/n" ''hi''
pero no para Tblue "%s/n" ''hi''
o printf "$(Tblue "%s" ''hi'')/n"
Como estos usan printf, puedes hacer cosas como estas:
printf "hi $(Tred there) man $(BaquaI "%c" ''!'') $(Bold ''This //t is %%s'') %s/n" "$(BgreenB ''super'')" "$(Bblue mega Colorful)"
o en un eco:
echo "hi $(Tred there) man $(BaquaI "%c" ''!'') $(Bold ''This //t is %s'' "$(BblackB ''super'')") $(Bblue mega Colorful)"
Un ejemplo más útil:
printf "/t%s Volume /"%s/" is not connected./n" "$(TwhiteB [)$(TredB Error)$(TwhiteB /]:)" "$(Tbrown $Volume)"
O con otros comandos:
eval "echo ''This is OSX'' | sed ''s:OSX:$(Invert [)$(TaquaF OSX)$(Invert ]):''"
O algo con un poco más swank:
find . -exec stat -f "Name: $(Tbrown %%N)%t%t$(Tpurple "->")%tPermissions: $(Tgreen %%Sp)" {} /;
¡Use su imaginación! Siéntete libre de usar todo esto ... lo único que pregunto es si alguien por ahí escribe más de ellos, los mezcla, los combina, como TcyanBgreenUI, o crea tus propios nombres ... ¿puedes publicarlos por mí y por favor? déjame saber acerca de la publicación? o envíelos por correo electrónico a [email protected] . Soy demasiado vago para escribir todas las posibilidades.
¡Disfrutar!
- Aesthir