1 votes

bash $PS1 contenant un emoj

Cette question est liée à https://apple.stackexchange.com/a/357132/44531

J'aimerais qu'il y ait un espace après l'emoj . J'ai essayé dans le script ci-dessous mais j'obtiens deux lignes au lieu de la ligne unique espérée. Et, Non je ne veux pas que deux espaces apparaissent dans le cas du code zéro retour comme je l'ai codé dans ma réponse originale.

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

Je suis sous 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 $ 

Lorsque j'essaie d'ajouter un espace dans le code ci-dessous, j'obtiens une nouvelle ligne ajoutée.

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 ------------

en fait, quand je copie et colle ici, j'obtiens un espace après l'emoj, mais l'espace n'apparaît pas dans mon terminal mac.

mac RC=127  $ 
mac $ 
mac $ 
mac $

1voto

slm Points 4018

Vous pouvez toujours ajouter des substitutions de commandes supplémentaires pour faire cela, par exemple :

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

Je ne sais pas pourquoi vous avez ce caractère NUL ( \x00 ) à la fin, mais j'ai obtenu ce message d'erreur :

$ 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

Je l'ai donc simplement retiré.

Ici, j'ai enveloppé votre original echo dans une substitution de commande $(..command..) et a ensuite transmis sa sortie à printf pour produire tout formatage supplémentaire.

Structure générale :

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

Exemple supplémentaire

Vous pouvez également utiliser printf exclusivement. Je ne suis pas tout à fait sûr de votre objectif ici, mais vous pourriez faire quelque chose comme ça :

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

Le code UTF-8 \x0a est un caractère de saut de ligne, l'exemple ci-dessus le supprime + le NUL, \x00 et j'ai ajouté 2 nouvelles lignes à la fin à la place, \n\n .

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X