Farben und Text in der Shell ausgeben

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 Textshow colors "Mein Text" 256
-> Farbbeispiele (256 Farben) mit eigenem Textshow colors "" 64
-> Farbbeispiele (hier mal nur 64 Farben) mit Standardtext

Die Ausgabe von Text in verschiedenen Stilen ist ebenfalls möglich.
show text
-> Textbeispiele mit dem Standardtextshow 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 }