Simboli e personaggi fantastici in un prompt di bash


81

Ho appena incontrato uno screenshot del terminale di qualcuno:

Schermata di una sessione che mostra un prompt con un asterisco e una freccia

C'è un elenco di tutti i personaggi che possono essere utilizzati in un prompt di Bash o qualcuno può procurarmi il personaggio per la stella e la freccia destra?

Risposte:


104

Puoi usare qualsiasi personaggio stampabile, a Bash non importa. Probabilmente vorrai configurare il tuo terminale per supportare Unicode (sotto forma di UTF-8 ).

Ci sono molti personaggi in Unicode, quindi ecco alcuni suggerimenti per aiutarti a cercare tra i grafici Unicode:

  • Puoi provare a disegnare il personaggio su Shapecatcher . Cerca di riconoscere un personaggio Unicode in ciò che disegni.
  • Puoi provare a capire in quale blocco si trova il personaggio. Ad esempio, quel simbolo dall'aspetto strano e quella stella si troverebbero in un blocco di simboli vari; personaggi come Ǫe ısono lettere latine con modificatori; è un simbolo matematico e così via.
  • Puoi provare a pensare a una parola nella descrizione del personaggio e cercarla in un elenco di nomi e descrizioni di simboli unicode. Gucharmap o Kcharselect possono aiutare.

PS Su Shapecatcher, ho avuto U + 2234 QUINDI per , U + 2192 Freccia verso destra per , U + 263F MERCURY per e U + 2605 BLACK STAR per .

In uno script bash, fino a bash 4.1, puoi scrivere un byte dal suo punto di codice, ma non un carattere. Se si desidera evitare caratteri non ASCII per rendere .bashrcresilienti le modifiche alla codifica dei file, è necessario immettere i byte corrispondenti a questi caratteri nella codifica UTF-8. È possibile visualizzare i valori esadecimali eseguendo echo ∴ → ☿ ★ | hexdump -Cin un terminale UTF-8, ad es. È codificato \xe2\x88\xb4in 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

Da bash 4.2, puoi usare \useguito da 4 cifre esadecimali in una $'…'stringa.

  PS1=$'\\[\e[31m\\]\u2234\\[\e[0m\\]\n\u2192 \u263f \\~ \\[\e[31m\\]\u2605 $? \\[\e[0m\\]'

Hmm. Quando eseguo echo ★ | hexdump -C1, ottengo: hexdump: invalid option -- '1'. Funzionerà ancora senza 1 nell'invocazione?
Naftuli Kay,

2
@TKKocheran Quello 1era un errore di battitura, è solo hexdump -C(o hdin breve su alcuni sistemi).
Gilles,

Inoltre, potresti farlo: PS1=$'\u2234\u2192\u263f\u2605'è più facile da mantenere :-)
mat

1
Shapecatcher è fantastico! grazie per averlo segnalato
Siamore il

1
@FaithReaper La \uNNNNsintassi è una funzione di $'…'quotazione, non di rapida espansione. Il valore di PS1deve contenere il carattere Unicode. $'\u1234'è un modo per inserire il carattere Unicode in una stringa.
Gilles,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.