1 votos

bash $PS1 que contiene un emoj

Esta pregunta está relacionada con https://apple.stackexchange.com/a/357132/44531

Me gustaría tener un espacio después del emoj€. Lo he intentado en el script que aparece a continuación, pero me aparecen dos líneas en lugar de la esperada línea única. Y, no quiero que aparezcan dos espacios en el caso de código de retorno cero como codifiqué en mi respuesta original.

enter image description here

mac RC=1 ?$ declare -f highlightExitCode
highlightExitCode () 
{ 
    exit_code=$?;
    if [ $exit_code -ne 0 ]; then
        echo -en " RC=${exit_code} "'\xf0\x9f\x98\xb1\x0a\x00';
    else
        echo -e "";
    fi
}
mac $ echo $PS1
\u$(highlightExitCode) \$
mac $ 
mac $ er
-bash: er: command not found
mac RC=127 ?$ 
# FYI: I edited out the non-appearing space 
#in my terminal output

Estoy usando MacOS 10.10.5.

 mac RC=127 ?
  $ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)
Copyright (C) 2007 Free Software Foundation, Inc.
mac $ 

Cuando intento añadir un espacio en el código de abajo, se me añade una nueva línea.

enter image description here

mac $ echo $PS1
\u$(highlightExitCode) \$
mac $ declare -f highlightExitCode
highlightExitCode () 
{ 
    exit_code=$?;
    if [ $exit_code -ne 0 ]; then
        echo -en " RC=${exit_code} "'\xf0\x9f\x98\xb1\x0a\x00'" ";
    else
        echo -e "";
    fi
}
mac $ error
-bash: error: command not found
mac RC=127 ?
  $ 
mac RC=127 ?
  $ 
mac RC=127 ?
  $ 

-------- fyi ------------

de hecho, cuando copio y pego aquí me sale un espacio después del emoj, pero el espacio no aparece en mi terminal de mac.

mac RC=127 ? $ 
mac $ 
mac $ 
mac $

0 votos

No puedo reproducir esto. Usando tu primer ejemplo (con el espacio en la definición de PS1) obtengo un espacio entre el emoji y el $ . La versión de Bash es 3.2.57(1)-release .

0 votos

FWIW printf '\xf0\x9f\x98\xb1\x20\x0a' devuelve '? ' sin las comillas y el prompt en la siguiente línea y hay un espacio después de ?

0 votos

¿Sabes que puedes poner el emoji directamente, ya que es unicode? Tuve el emoji de la taza de café en mi $PS1 durante años, ¡funcionó bien!

1voto

slm Puntos 118

Para ello, siempre se pueden incluir sustituciones de comandos adicionales, por ejemplo

$ printf "%s  <-- some space after it" "$(echo -en " RC=${exit_code} "'\xf0\x9f\x98\xb1\x0a')"
 RC= ?  <-- some space after it

No estoy seguro de por qué tienes ese carácter NUL ( \x00 ) pero con eso me salía este mensaje de error:

$ printf "%s  <-- some space after it" "$(echo -en " RC=${exit_code} "'\xf0\x9f\x98\xb1\x0a\x00')"
-bash: warning: command substitution: ignored null byte in input
 RC= ?  <-- some space after it

Así que simplemente lo eliminé.

Aquí he envuelto su original echo en una sustitución de comandos $(..command..) y luego pasó su salida a printf para producir cualquier formato adicional.

Estructura general:

$ printf "%s ...." "$(..command to produce output..)"

Ejemplo adicional

También puede utilizar printf exclusivamente. No estoy del todo seguro de cuál es tu objetivo aquí, pero podrías hacer algo así:

$ printf "RC=${exit_code} \xf0\x9f\x98\xb1  <-- some space after it\n\n"
RC= ?  <-- some space after it

El código UTF-8 \x0a es un carácter de salto de línea, el ejemplo anterior lo eliminó + el NUL, \x00 y añadí 2 nuevas líneas al final en su lugar, \n\n .

0 votos

Has hecho una observación clave sobre el extra \x00 y \x0a. Había olvidado la diferencia entre echo y echo -n.

0 votos

Mi problema fue que copié de Maghin cuya versión de hexdump tenía por defecto la opción -x y Maghin usaba sólo echo. La combinación de los dos resultados en \x00 y \x0a que se incluye. Nunca había visto emojs en hexadecimal. No sabía lo que estaba viendo así que estaba haciendo copias a ciegas. Recomiendo usar hexdump -C para obtener una mejor visualización.

0 votos

@historystamp - Yo trato con UTF-8 y hexadecimal todo el tiempo por lo que saltó a la derecha en mí 8-). ¿Se ha resuelto tu problema entonces?

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