0 votos

`setaf`, inconsistencia + falla (Ventura, Sonoma)

Estoy intentando personalizar mi símbolo bash, para que obtenga esto:

enter image description here

es decir, el texto de usuario está en negrita, pero stdout no lo es.

Funcionaba, pero después de actualizar mi mac está fallando.

Máquina A: MacBook Pro 2017 ejecutando Ventura. Máquina B: MacBook Pro M2 ejecutando Sonoma (Pre-Lanzamiento).

Mi símbolo bash PS1 (definido en ~/.bash_profile) está definido así:

function rgb {
    # https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
    let "sum = 16 + 36*$1 + 6*$2 + $3"
    # echo "\[\e[${sum}m\]"
    tput setaf ${sum}
}

  BOLD=$(tput bold)
   DIM=$(tput dim)
 RESET=$(tput sgr0)

BRIGHT=$(rgb 5 5 5)
  BLUE=$(rgb 1 1 5)
YELLOW=$(rgb 4 4 1)

PS1="\n"
PS1+=" \[${DIM}\]"
PS1+="\u"
PS1+="${BRIGHT}@"
PS1+="\[${BRIGHT}\]"
PS1+="\h "
PS1+="\[${BLUE}\]"
PS1+="\w "
PS1+="\n"
PS1+="\[${BRIGHT}\]"
PS1+="> "
PS1+="\[${BOLD}\]"

En la Máquina A funciona:

A funciona

En la Máquina B, no del todo:

B falla

Y no puedo entender por qué.

En una máquina dada hay consistencia entre Terminal.app, iTerm2 y Terminal Integrado de VSCode.

Así que volví a lo básico, y descubrí que en ambas máquinas, esto funciona correctamente:

> echo -e "\033[32mEsto debería ser verde\033[0m"

... mientras que esto falla (sale en blanco):

> tput setaf 2; echo "Esto debería ser verde"

B-no-verde

Me sorprende observar este comportamiento en la máquina A, después de tantos años sin notar ningún problema.

Entonces, me enfrento a dos enigmas:

  • ¿por qué está fallando mi símbolo en la máquina B
  • ¿por qué falla ese tput en ambas máquinas?

¿Debería simplemente evitar tput aquí? Supongo que solo lo hice porque se ve más limpio que las secuencias de escape.

0voto

P i Puntos 263

Al final tuve que construir hacia arriba desde cero.

No intentaré explicar este código; ¡GP4 hará un mejor trabajo!

Había un ${DIM} que de alguna manera se estaba RESETEANDO en el sistema anterior pero no en el nuevo sistema. No lo entiendo.

¡Todo lo que puedo decir es: ahora funciona!

function rgb {
    let "sum = 16 + 36*$1 + 6*$2 + $3"
    echo -n "\[\e[38;5;${sum}m\]"
}

BOLD=$(tput bold)
DIM=$(tput dim)
RESET_RAW='\e[0m'
RESET='\[\e[0m\]'

BRIGHT=$(rgb 4 4 4)
BLUE=$(rgb 1 1 5)
YELLOW=$(rgb 4 4 1)

git_branch() {
  git rev-parse --abbrev-ref HEAD 2>/dev/null
}

PS1="\n"
PS1+="$(rgb 2 2 2)\u"
PS1+="$(rgb 1 1 1)@"
PS1+="$(rgb 2 3 2)\h "            # `sudo scutil --set HostName foo` to set hostname (\h)`
PS1+="${BLUE}\w "
PS1+="${YELLOW}\$(git_branch)"
PS1+="\n"
PS1+="$(rgb 3 3 3)> "
PS1+="${BRIGHT}${BOLD}"

PS2="${BOLD}> ${RESET}"

trap 'echo -ne "${RESET_RAW}" > $(tty)' DEBUG

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X