Farben und Text in der Shell ausgeben

Aus wiki.archlinux.de
Anzeige der 16 konfigurierten Standardfarben in Alacritty in der Zsh.

Will man Farben und Text (z.B. Fettschrift, kursiver Text, oder unterstrichener Text, etc.) in der Shell ausgeben, um die Shell und den Terminalemulator zu testen oder beim Konfigurieren zu überprüfen, wie das Ergebnis aussieht, oder um die Gestaltung mit anderen zu teilen, kann man folgende Funktion verwenden, die man in der Konfiguration der gewünschten Shell hinterlegen kann.

Die Funktion unterstützt mehrere Parameter:

  • show colors -> Farbbeispiele (die 16 Standardfarben)
  • show colors "Mein Text" -> Farbbeispiele mit eigenem Text
  • show colors "Mein Text" 256 -> Farbbeispiele (256 Farben) mit eigenem Text
  • show colors "" 64 -> Farbbeispiele (hier mal nur 64 Farben) mit Standardtext
Anzeige von Textbeispielen in Alacritty in der Zsh.

Die Ausgabe von Text in verschiedenen Stilen ist ebenfalls möglich.

  • show text -> Textbeispiele mit dem Standardtext
  • show text "Mein Text" -> Textbeispiele mit eigenem Text

Das Script ist POSIX-Konform, und funktioniert damit in jeder Shell, die den POSIX-Standard unterstützt. Die verwendeten ANSI-Codes (und deren nicht-standardisierten Erweiterungen für mehr Schriftstile und Unterstreichungsarten) sollten von den meisten Terminalemulatoren richtig interpretiert werden oder zumindest nicht zu Fehlern führen.

zum Beispiel in ~/.bashrc
show () {
    if [ "$1" = 'text' ]; then
        text="${2:-This is what it looks like}"
        printf "\nnormal   ${text}\n"
        printf "bold     \033[1m$text\033[0m\n"
        printf "dim      \033[2m$text\033[0m\n"
        printf "inverse  \033[7m$text\033[0m\n\n"
        printf "italic        \033[3m$text\033[0m\n"
        printf "bold/italic   \033[1;3m$text\033[0m\n"
        printf "strikethrough \033[9m$text\033[0m\n\n"
        printf "single  \033[4:1m$text\033[0m\n"
        printf "double  \033[4:2m$text\033[0m\n"
        printf "curly   \033[4:3m$text\033[0m\n"
        printf "dotted  \033[4:4m$text\033[0m\n"
        printf "dashed  \033[4:5m$text\033[0m\n"
    fi

    if [ "$1" = 'colors' ]; then
        text="${2:-Color example}"
        amount="${3:-16}"
        index=0
        padding=$(( ${#amount} + 1 ))
        printf "\n"
        while [ "$index" -lt "$amount" ]; do
            printf "%${padding}s │ \033[38;5;${index}m██████\033[0m" "$index"
            printf " │ \033[38;5;${index}m$text\033[0m"
            printf " │ \033[38;5;${index}m\033[7m $text \033[0m\n"
            index=$(expr $index + 1)
        done
    fi
}