Symboles et personnages impressionnants dans une invite bash

81

Je viens de tomber sur une capture d'écran du terminal de quelqu'un:

Capture d'écran d'une session montrant une invite avec un astérisque et une flèche

Existe-t-il une liste de tous les caractères pouvant être utilisés dans une invite Bash, ou quelqu'un peut-il me fournir le caractère de l'étoile et de la flèche droite?

Naftuli Kay
la source

Réponses:

104

Vous pouvez utiliser n'importe quel caractère imprimable, cela ne dérange pas bash. Vous voudrez probablement configurer votre terminal pour prendre en charge l’ Unicode (sous la forme UTF-8 ).

Unicode contient beaucoup de caractères. Voici donc quelques astuces pour vous aider à rechercher dans les graphiques Unicode:

  • Vous pouvez essayer de dessiner le personnage sur Shapecatcher . Il essaie de reconnaître un caractère Unicode dans ce que vous dessinez.
  • Vous pouvez essayer de trouver dans quel bloc se trouve le personnage. Par exemple, ce symbole étrange et cette étoile seraient dans un bloc de symboles divers; les caractères comme Ǫet ısont des lettres latines avec modificateurs; est un symbole mathématique, etc.
  • Vous pouvez essayer de penser à un mot dans la description du caractère et de le rechercher dans une liste de noms et de descriptions de symboles Unicode. Gucharmap ou Kcharselect peuvent vous aider.

PS Sur Shapecatcher, j’ai donc obtenu U + 2234 pour , U + 2192 FLÈCHE VERS LA DROITE pour , U + 263F MERCURY pour et U + 2605 BLACK STAR pour .

Dans un script bash, jusqu'à bash 4.1, vous pouvez écrire un octet par son point de code, mais pas par un caractère. Si vous souhaitez éviter les caractères non-ASCII pour vous .bashrcprotéger des modifications de codage de fichier, vous devez entrer les octets correspondant à ces caractères dans le codage UTF-8. Vous pouvez voir les valeurs hexadécimales en exécutant echo ∴ → ☿ ★ | hexdump -Cdans un terminal UTF-8, par exemple, il est codé par \xe2\x88\xb4en UTF-8.

if [[ $LC_CTYPE =~ '\.[Uu][Tt][Ff]-?8' ]]; then
  PS1=$'\\[\e[31m\\]\xe2\x88\xb4\\[\e[0m\\]\n\xe2\x86\x92 \xe2\x98\xbf \\~ \\[\e[31m\\]\xe2\x98\x85 $? \\[\e[0m\\]'
fi

Depuis bash 4.2, vous pouvez utiliser \usuivi de 4 chiffres hexadécimaux dans une $'…'chaîne.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'
Gilles
la source
Hmm. Quand je cours echo ★ | hexdump -C1, je reçois: hexdump: invalid option -- '1'. Cela fonctionnera-t-il toujours sans le 1 dans l'invocation?
Naftuli Kay
2
@TKKocheran C'était 1une faute de frappe, c'est juste hexdump -C(ou hdpour faire court sur certains systèmes).
Gilles
En outre, vous pouvez faire: PS1=$'\u2234\u2192\u263f\u2605'se sent plus facile à entretenir :-)
Mat
1
Shapecatcher est génial! merci de le signaler
Siamore
1
@FaithReaper La \uNNNNsyntaxe est une fonctionnalité de $'…'citation, pas de développement rapide. La valeur de PS1doit contenir le caractère Unicode. $'\u1234'est un moyen de mettre le caractère Unicode dans une chaîne.
Gilles
12

Vous pouvez trouver les symboles Unicode sur de nombreux sites, comme celui-ci: http://panmental.de/symbols/info.htm

Vous devez simplement vous assurer que votre mandat prend en charge UTF-8 .

jasonwryan
la source
Comment pourrais-je échapper à l'un de ces personnages? C'est-à-dire\u27A4
Naftuli Kay,
2
Voir la réponse de @Gilles ou ceci: stackoverflow.com/questions/602912/…
jasonwryan
Vous pouvez voir tous les 65 000+ points Unicode sur utf8-chartable.de (dans le contexte des valeurs de points de code, "utf8" est synonyme de "unicode".)
goldilocks