Ich versuche, einen Text im Terminal mit dem Befehl echo zu drucken.
Ich möchte den Text in einer roten Farbe drucken. Wie kann ich das machen?
linux
bash
command-line
echo
terminal-color
satheesh.droid
quelle
quelle
Antworten:
Sie können diese ANSI-Escape-Codes verwenden :
Und verwenden Sie sie dann wie folgt in Ihrem Skript:
welches
love
in rot druckt .Wenn Sie den
echo
Befehl aus dem Kommentar von @ james-lim verwenden, müssen Sie das Flag -e verwenden, um Backslash- Escapezeichen zuzulassen .(Fügen Sie
"\n"
bei Verwendung von Echo nichts hinzu , es sei denn, Sie möchten zusätzliche Leerzeilen hinzufügen.)quelle
\e[0;31mHello Stackoverflow\e[0m
echo
an, Backslash-Escapezeichen zu aktivieren.\x1B
anstelle von\e
.\033
wäre für alle plattformen ok.for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Sie können den
tput
Befehl awesome (in Ignacios Antwort vorgeschlagen ) verwenden, um Terminalsteuerungscodes für alle möglichen Dinge zu erstellen.Verwendungszweck
Bestimmte
tput
Unterbefehle werden später erläutert.Direkte
Aufruf
tput
als Teil einer Befehlsfolge:Verwenden Sie
;
stattdessen&&
, wenntput
der Text weiterhin Fehler anzeigt.Shell-Variablen
Eine andere Option ist die Verwendung von Shell-Variablen:
tput
erzeugt Zeichenfolgen, die vom Terminal als besonders bedeutsam interpretiert werden. Sie werden nicht selbst gezeigt. Beachten Sie, dass sie weiterhin in Dateien gespeichert oder von anderen Programmen als dem Terminal als Eingabe verarbeitet werden können.Befehlsersetzung
Es kann bequemer sein,
tput
die Ausgabeecho
mithilfe der Befehlssubstitution direkt in Ihre Zeichenfolgen einzufügen :Beispiel
Der obige Befehl erzeugt dies unter Ubuntu:
Befehle für Vordergrund- und Hintergrundfarben
Die Farben sind wie folgt:
Es gibt auch Nicht-ANSI-Versionen der Farbeinstellungsfunktionen (
setb
anstelle vonsetab
undsetf
anstelle vonsetaf
), die unterschiedliche Zahlen verwenden, die hier nicht angegeben sind.Textmodusbefehle
Cursorbewegungsbefehle
Befehle löschen und einfügen
Andere Befehle
Bei wackeligen Fenstern lässt der
bel
Befehl das Terminal eine Sekunde lang wackeln, um die Aufmerksamkeit des Benutzers auf sich zu ziehen.Skripte
tput
Akzeptiert Skripte mit einem Befehl pro Zeile, die in der Reihenfolge vor demtput
Beenden ausgeführt werden.Vermeiden Sie temporäre Dateien, indem Sie eine mehrzeilige Zeichenfolge wiederholen und weiterleiten:
Siehe auch
man 1 tput
man 5 terminfo
die vollständige Liste der Befehle und weitere Informationen zu diesen Optionen. (Der entsprechendetput
Befehl ist in derCap-name
Spalte der großen Tabelle aufgeführt, die in Zeile 81 beginnt.)quelle
$()
ist das eine Befehlsersetzung . Allestput af 1
, was Sie tun müssen, ist, die Farbcode-Zeichenfolge zu generieren, aber die Codes sind keine druckbaren Zeichen. Wenn Sie also nur eingebentput af 1
, wird eine leere Ausgabezeile erzeugt.ncurses
tput
Farben finden Sie in dieser Antwort auf Unix StackExchangereset=`tput sgr0`
solltereset=`tput sgr 0`
mit einem Leerzeichen sein.Einige Variablen, die Sie verwenden können:
das Escape-Zeichen in Bash , Hex und Octal :
kurzes Beispiel:
Bash-Ausnahme:
Wenn Sie diese Codes in Ihren speziellen Bash-Variablen verwenden möchten
Sie sollten zusätzliche Escape-Zeichen hinzufügen, damit Bashkann sie richtig interpretieren. Ohne dieses Hinzufügen zusätzlicher Escape-Zeichen funktioniert es, aber Sie werden Probleme haben, wenn Sie
Ctrl + r
für die Suche in Ihrem Verlauf verwenden.Ausnahmeregel für Bash
Sie sollten
\[
vor jedem beginnenden ANSI-Code und\]
nach jedem endenden hinzufügen.Beispiel:
im regulären Gebrauch:
\033[32mThis is in green\033[0m
für PS0 / 1/2/4:
\[\033[32m\]This is in green\[\033[m\]
\[
ist für den Beginn einer Folge von nicht druckbaren Zeichen\]
ist für das Ende einer Folge von nicht druckbaren ZeichenTipp: Zum Auswendiglernen können Sie zuerst
\[\]
Ihren ANSI-Code hinzufügen und dann dazwischen setzen:-
\[start-ANSI-code\]
-
\[end-ANSI-code\]
Art der Farbsequenz:
Bevor Sie in diese Farben eintauchen, sollten Sie 4 Modi mit diesen Codes kennen:
1. Farbmodus
Es ändert den Farbstil NICHT Text. Machen Sie zum Beispiel die Farbe hell oder dunkler.
0
zurücksetzen1;
leichter als normal2;
dunkler als normalDieser Modus wird nicht allgemein unterstützt. Es wird auf Gnome-Terminal voll unterstützt.
2. Textmodus
Dieser Modus dient zum Ändern des Textstils, NICHT der Farbe.
3;
kursiv4;
unterstreichen5;
blinkend (langsam)6;
blinkend (schnell)7;
umkehren8;
ausblenden9;
durchgestrichenund werden fast unterstützt.
Zum Beispiel unterstützt KDE-Konsole,
5;
aber Gnome-Terminal nicht und Gnome unterstützt,8;
aber KDE nicht.3. Vordergrundmodus
Dieser Modus dient zum Färben des Vordergrunds.
4. Hintergrundmodus
Dieser Modus dient zum Färben des Hintergrunds.
Die folgende Tabelle zeigt eine Zusammenfassung der 3/4 Bit- Version von ANSI-color
Die folgende Tabelle zeigt eine Zusammenfassung der 8-Bit- Version von ANSI-Farbe
Der 8-Bit-Schnelltest:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
Die folgende Tabelle zeigt eine Zusammenfassung der 24-Bit- Version von ANSI-Farbe
einige Screenshots
Vordergrund 8-Bit-Zusammenfassung in a
.gif
Hintergrund 8-Bit-Zusammenfassung in a
.gif
Farbübersicht mit ihren Werten
blinking
am KDE-TerminalEin einfacher
C
Code, der Ihnen mehr zeigtEin fortgeschritteneres Werkzeug, das ich entwickelt habe, um mit diesen Farben umzugehen:
Farbmodusaufnahme
Textmodus aufgenommen
Kombinieren ist OK
mehr Aufnahmen
Tipps und Tricks für fortgeschrittene Benutzer und Programmierer:
Können wir diese Codes in einer Programmiersprache verwenden?
Ja, du kannst. Ich habe in erlebtBash, c, c ++, d perl, Python
Verlangsamen sie die Geschwindigkeit eines Programms?
Ich denke nicht.
Können wir diese unter Windows verwenden?
3/4-Bit Ja, wenn Sie den Code mit einigen Screenshots unter Win-7 kompilieren
gcc
Wie berechnet man die Länge des Codes?
\033[
= 2, andere Teile 1Wo können wir diese Codes verwenden?
Überall hat , dass ein
tty
Dolmetscherxterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
und so weiter.Wenn Sie beispielsweise Ihre Ausgabe mit MySQL einfärben möchten, können Sie sie verwenden
Perl
Speichern Sie diesen Code in einem Dateinamen:
pcc
(= Perl Colorize Character) und fügen Sie die Datei in eine gültige Datei ein.PATH
Verwenden Sie sie dann an einer beliebigen Stelle.ls | pcc
df | pcc
innen
mysql
erst registrierenpager
und dann versuchen:Unicode wird NICHT verarbeitet.
Färben diese Codes nur?
Nein, sie können viele interessante Dinge tun. Versuchen:
oder:
Es gibt viele Anfänger, die den Bildschirm löschen möchten,
system( "clear" )
damit Sie dies anstelle einessystem(3)
Anrufs verwenden könnenSind sie in Unicode verfügbar?
Ja.
\u001b
Welche Version dieser Farben ist vorzuziehen?
Es ist einfach zu bedienen
3/4-bit
, aber es ist sehr genau und schön zu bedienen24-bit
.Wenn Sie keine Erfahrung mit habenhtmlHier ist ein kurzes Tutorial:
24 Bit bedeutet:
00000000
und00000000
und00000000
. Jedes 8-Bit ist für eine bestimmte Farbe.1..8
ist für und9..16
für und17..24
fürSo inhtml
#FF0000
bedeutet und hier ist es:255;0;0
inhtml
#00FF00
bedeutet was hier ist:0;255;0
Ist das sinnvoll? Welche Farbe Sie möchten, kombinieren Sie sie mit diesen drei 8-Bit-Werten.
Referenz:
Wikipedia
ANSI-Escape-Sequenzen
tldp.org
tldp.org
misc.flogisoft.com
einige Blogs / Webseiten, an die ich mich nicht erinnere
quelle
x1B[
um es zu beseitigen.Verwenden Sie
tput
mit dersetaf
Fähigkeit und einem Parameter von1
.quelle
\033[31m
bricht die Readline- Bibliothek in einigen Terminals.i
die Obergrenze für mehr Schattierungen):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(auf alpinen)Das
[31m
steuert die Textfarbe:30
-37
Sätze Vordergrund Farbe40
-47
Sätze Hintergrund FarbeEine vollständigere Liste der Farbcodes finden Sie hier .
Es wird empfohlen, die Textfarbe
\033[0m
auf das Ende der Zeichenfolge zurückzusetzen.quelle
Ich habe gerade die guten Fänge in allen Lösungen zusammengeführt und am Ende Folgendes erhalten:
Und Sie können es einfach so nennen:
quelle
Dies ist der Farbschalter
\033[
. Siehe Geschichte .Farbcodes sind wie
1;32
(hellgrün),0;34
(blau),1;34
(hellblau), usw.Wir beenden Farbsequenzen mit einem Farbschalter
\033[
und0m
dem No- Colour-Code. Genau wie das Öffnen und Schließen von Registerkarten in einer Auszeichnungssprache.Einfache
echo
Farbfunktionslösung:quelle
text
Variable auftext="$color${@: 2}${code}0m"
diese Weise ändern , wobei die gesamte Zeile mit Ausnahme des Farbparameters farbig wird.Eine gute Möglichkeit, die Farbe nur für eine Person zu ändern,
echo
besteht darin, eine solche Funktion zu definieren:Verwendungszweck:
Oder Sie können direkt die in Drews Antwort genannten Farbcodes verwenden :
quelle
-n
zu Echo hinzufügen , können Sie es als Inline-Färbung verwendenecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Verwenden Sie
tput
diese Option , um Farbcodes zu berechnen. Vermeiden Sie die Verwendung des ANSI-Escape-Codes (z. B.\E[31;1m
für Rot), da dieser weniger portabel ist. Bash unter OS X unterstützt dies beispielsweise nicht.quelle
Diese Frage wurde immer wieder beantwortet :-) aber warum nicht.
Die erste Verwendung
tput
ist in modernen Umgebungen portabler als das manuelle Einfügen von ASCII-Codesecho -E
Hier ist eine schnelle Bash-Funktion:
Jetzt können Sie verwenden:
bekommen:
Hinweise zur Portabilität von
tput
Erstes Mal
tput(1)
Quellcode wurde im September 1986 hochgeladentput(1)
wurde in den 1990er Jahren in der X / Open-Curses-Semantik verfügbar (Standard von 1997 hat die unten erwähnte Semantik).Es ist also ( ziemlich ) allgegenwärtig.
quelle
tput
? Ist es auf den meisten Servern verfügbar, auf denen keine Administratorrechte zum Installieren vorhanden sind? Haben Sie einen Link zu dem Ort, an dem diese Technik zuerst erfunden wurde?$PS1
ohne\[...\]
um die nicht beabstandeten Teile verwenden? Verwenden Sie weiterhin die Bash PS1-Marker mit den tput-Zeichenfolgen.Vielen Dank an @ k-five für diese Antwort
Ergebnis
Hoffe, dieses Bild hilft Ihnen bei der Auswahl Ihrer Farbe für Ihre Bash: D.
quelle
Wenn Sie
zsh
oder verwendenbash
Versuchen Sie es online
quelle
Wir können 24-Bit-RGB-Echtfarben sowohl für Text als auch für Hintergrund verwenden!
Beispiel roter Text und schließendes Tag:
Generator:
Code-Snippet anzeigen
Ist die Verwendung in meinen Skripten sicher?
Ja! 8- und 16-Bit-Terminals zeigen nur als Fallback eine Farbe im Bereich der verfügbaren Palette an, wobei der beste Kontrast erhalten bleibt, keine Brüche!
Außerdem bemerkte niemand die Nützlichkeit des umgekehrten ANSI-Code 7- Videos .
Durch Vertauschen der Vordergrund- und Hintergrundfarben bleibt es auf allen Terminalschemafarben, schwarzen oder weißen Hintergründen oder anderen Phantasiepaletten lesbar.
Beispiel für einen roten Hintergrund, der überall funktioniert:
So sieht es aus, wenn Sie die integrierten Terminalschemata ändern:
Dies ist das für das GIF verwendete Schleifenskript.
Siehe https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
quelle
Diese Codes funktionieren auf meiner Ubuntu-Box:
Dadurch werden die Buchstaben abcd alle in verschiedenen Farben gedruckt:
For-Schleife:
quelle
Ich fand Shakiba Moshiris großartige Antwort, als ich Informationen zu diesem Thema suchte… dann hatte ich eine Idee… und es endete mit einer sehr schönen Funktion, die extrem einfach zu bedienen war (
also muss ich sie teilen)
https://github.com/ppo/bash-colors
Verwendung:
$(c <flags>)
innerhalb einesecho -e
oderprintf
Beispiele:
quelle
Zur besseren Lesbarkeit
Wenn Sie die Lesbarkeit des Codes verbessern möchten , können Sie zuerst
echo
die Zeichenfolge und später die Farbe hinzufügen, indem Sie Folgendes verwendensed
:quelle
Meine bisherige Lieblingsantwort ist colouredEcho.
Um eine weitere Option zu veröffentlichen, können Sie sich dieses kleine Tool xcol ansehen
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
Sie verwenden es wie grep und es färbt sein stdin zum Beispiel für jedes Argument mit einer anderen Farbe
Beachten Sie, dass alle regulären Ausdrücke akzeptiert werden, die sed akzeptiert.
Dieses Tool verwendet die folgenden Definitionen
Ich benutze diese Variablen in meinen Skripten wie folgt
quelle
Um diese Antwort für die Faulen von uns zu erweitern:
quelle
tput
; dafür ist es da!tput
fürsc
undrc
obwohl verwenden (Cursor speichern, Cursor wiederherstellen). Obwohl diese Antwort mich "faul" nennt, könnte sie als "praktisch" oder "direkt auf den Punkt" umformuliert werden.So zeigen Sie die Nachrichtenausgabe in verschiedenen Farben an:
quelle
Sie sollten auf jeden Fall tput über rohe ANSI-Kontrollsequenzen verwenden.
von http://wiki.bash-hackers.org/scripting/terminalcodes
Trotzdem habe ich eine kleine Hilfsbibliothek namens geschrieben bash-tint geschrieben Hilfsbibliothek , die zusätzlich zu tput eine weitere Ebene hinzufügt, was die Verwendung noch einfacher macht (imho):
Beispiel:
tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
Würde folgendes Ergebnis geben:
quelle
Ich sollte anstelle der harten Codierung von Escape-Codes, die für Ihr aktuelles Terminal spezifisch sind, verwenden
tput
.Dies ist mein Lieblings-Demo-Skript:
quelle
Ich benutze dies für den Farbdruck
Alle Grundfarben sind als vars festgelegt und es gibt einige nützliche Funktionen: XY, line und que. Verwenden Sie dieses Skript in einem Ihrer Skripte und verwenden Sie alle Farbvarianten und -funktionen.
quelle
Und das, was ich verwendet habe, um alle Kombinationen zu sehen und zu entscheiden, was cool liest:
quelle
Ich habe Beute geschrieben , um genau das zu erreichen.
Du kannst es einfach tun
Jetzt können Sie alle Escape-Befehle als txt-Dateien an einem bestimmten Ziel installieren über:
Oder noch einfacher über:
Welches wird die Farben installieren
~/.colors
.Entweder du benutzt sie so:
Oder so, was ich eigentlich interessanter finde:
Schau es dir im Asciinema an !
quelle
Hier ist ein einfaches kleines Skript, das ich kürzlich zusammengestellt habe und das alle leitungsgebundenen Eingaben einfärbt, anstatt "Toilette" zu verwenden.
File: color.bsh
Dann nenne es mit der Farbe Rot (196):
$> echo "text you want colored red" | color.bsh 196
quelle
Beziehen auf:
quelle
Hier ist die einfachste und lesbarste Lösung. Mit bashj ( https://sourceforge.net/projects/bashj/ ) würden Sie einfach eine der folgenden Zeilen auswählen:
256x256x256
Farben sind verfügbar, wenn Sie die Farbunterstützung in Ihrer Terminalanwendung haben.quelle
Nachdem ich andere Lösungen aus dem Thread gemischt habe, habe ich
npm scripts
Folgendes erreicht: Farben in der Ausgabe (gitbash CLI):quelle
Genau wie etwas da draußen, wenn Sie es durch grep führen, wird es als rot (aber nur rot) hervorgehoben. Sie können auch Named Pipes verwenden, damit sich Ihre Zeichenfolge näher am Zeilenende befindet:
quelle
Diese Antwort ist korrekt, außer dass der Aufruf zu Farben nicht in Anführungszeichen stehen sollte.
Sollte den Trick machen.
quelle
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. So ist es auch für Bash.