Fantastische Symbole und Zeichen in einer Bash-Eingabeaufforderung

81

Ich bin gerade auf einen Screenshot eines Terminals gestoßen:

Screenshot einer Sitzung mit einer Eingabeaufforderung mit einem Sternchen und einem Pfeil

Gibt es eine Liste aller Zeichen, die in einer Bash-Eingabeaufforderung verwendet werden können, oder kann mir jemand das Zeichen für den Stern und den rechten Pfeil geben?

Naftuli Kay
quelle

Antworten:

104

Sie können jedes druckbare Zeichen verwenden, was Bash nichts ausmacht. Möglicherweise möchten Sie Ihr Terminal für die Unterstützung von Unicode (in Form von UTF-8 ) konfigurieren .

Da Unicode viele Zeichen enthält, finden Sie hier einige Tipps zum Durchsuchen der Unicode-Diagramme:

  • Sie können versuchen, den Charakter in Shapecatcher zu zeichnen . Es wird versucht, ein Unicode-Zeichen in dem zu erkennen, was Sie zeichnen.
  • Sie können versuchen, herauszufinden, in welchem ​​Block sich das Zeichen befindet. Zum Beispiel befinden sich dieses seltsam aussehende Symbol und dieser Stern in einem Block mit verschiedenen Symbolen. Zeichen wie Ǫund ısind lateinische Buchstaben mit Modifikatoren; ist ein mathematisches Symbol und so weiter.
  • Sie können versuchen, sich ein Wort in der Beschreibung des Zeichens zu überlegen und in einer Liste mit Unicode-Symbolnamen und -beschreibungen danach zu suchen. Gucharmap oder kcharselect helfen können.

PS: Auf Shapecatcher habe ich U + 2234 für , U + 2192 RIGHTWARDS ARROW für , U + 263F MERCURY für und U + 2605 BLACK STAR für .

In einem Bash-Skript bis Bash 4.1 können Sie ein Byte nach seinem Codepunkt, aber nicht nach einem Zeichen schreiben. Wenn Sie Nicht-ASCII-Zeichen vermeiden möchten, um .bashrcÄnderungen der Dateicodierung zu vermeiden , müssen Sie die diesen Zeichen entsprechenden Bytes in die UTF-8-Codierung eingeben. Sie können die Hexadezimalwerte anzeigen, indem Sie echo ∴ → ☿ ★ | hexdump -Cin einem UTF-8-Terminal ausgeführt werden, das z. B. in UTF-8 codiert ist \xe2\x88\xb4.

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

Seit Bash 4.2 können Sie \ugefolgt von 4 hexadezimalen Ziffern in einer $'…'Zeichenfolge verwenden.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'
Gilles
quelle
Hmm. Wenn ich laufen echo ★ | hexdump -C1, erhalte ich: hexdump: invalid option -- '1'. Funktioniert es auch ohne die 1 im Aufruf?
Naftuli Kay
2
@TKKocheran Das 1war ein Tippfehler, es ist nur hexdump -C(oder hdkurz auf einigen Systemen).
Gilles
Sie können auch Folgendes tun: PS1=$'\u2234\u2192\u263f\u2605'Fühlt sich leichter zu warten an :-)
mat
1
Shapecatcher ist großartig!
Vielen
1
@FaithReaper Die \uNNNNSyntax ist eine Funktion des $'…'Zitierens und nicht der sofortigen Erweiterung. Der Wert von PS1muss das Unicode-Zeichen enthalten. $'\u1234'ist eine Möglichkeit, das Unicode-Zeichen in eine Zeichenfolge einzufügen.
Gilles
12

Sie finden die Unicode-Symbole auf vielen Websites, z. B. http://panmental.de/symbols/info.htm

Sie müssen nur sicherstellen, dass Ihr Begriff UTF-8 unterstützt .

jasonwryan
quelle
Wie würde ich einer dieser Figuren entkommen? Ie\u27A4
Naftuli Kay
2
Siehe @ Gilles Antwort, oder dies: stackoverflow.com/questions/602912/…
jasonwryan
Sie können alle 65000+ Unicode - Punkte bei sehen utf8-chartable.de (Im Rahmen der Codepunktwerte „UTF - 8“ ist ein Synonym für „Unicode“.)
goldilocks