Dans une invite Bash (variable PS1), j'appelle une fonction pour potentiellement ajouter du texte à l'invite: export PS1="\u@\h \$(my_function) \$ "
Cependant, la fonction dans l'invite contient des codes de couleur ANSI qui changent en fonction de la sortie de la fonction (parfois rouge, parfois verte). L'ajout de " \[
" à la variable PS1 devrait échapper à ces codes en tant que non-impression, mais si je fais un echo
dans la fonction, le " \[
" s'imprime littéralement dans l'invite.
Comment puis-je échapper ces codes de couleur ANSI depuis une fonction pour les utiliser dans une invite bash?
echo -e "\001\e[31m\002RED"
fonctionne comme prévu. Merci!\001
et\002
fonctionneront. Sinon, je ne suis pas sûr. Dash, par exemple, n'utilise certainement pas readline .Voici une belle réponse complète. J'ai dû faire beaucoup plus de recherches pour savoir où le \ 001 etc. devait aller. J'espère que cela t'aides.
De la façon dont je l'ai configuré ici, les parenthèses de la branche git n'apparaissent que si vous êtes dans une branche git, sinon c'est vide.
la source
Sur la base de la réponse de grawity , les éléments suivants incluront les séquences de contrôle ANSI en ASCII
SOH
(^A
) etSTX
(^B
) qui sont équivalentes\[
et\]
respectivement:Utilisez-le comme:
Ou:
En prime, l'exécution de la fonction plusieurs fois ne rééchappera pas aux codes de contrôle déjà échappés.
la source
Si vous souhaitez les utiliser dans l'invite, vous devez effectuer la
\[
. Mais si vous voulez l'utiliser dans un écho, vous devez utiliser\033[
.la source