Wenn es so geschrieben wird, wird Text in Blau ausgegeben:
printf "\e[1;34mThis is a blue text.\e[0m"
Aber ich möchte, dass das Format in printf definiert wird:
printf '%-6s' "This is text"
Jetzt habe ich verschiedene Optionen zum Hinzufügen von Farbe ausprobiert, ohne Erfolg:
printf '%-6s' "\e[1;34mThis is text\e[0m"
Ich habe sogar erfolglos versucht, dem Format Attributcode hinzuzufügen. Dies funktioniert nicht und ich kann nirgendwo ein Beispiel finden, in dem Farben zu printf hinzugefügt werden, dessen Format wie in meinem Fall definiert ist.
printf
Befehl ist derprintf()
Funktion in der Sprache C nachempfunden . Dort ist der erste Parameter / das erste Argument immer dieformat
Zeichenfolge, die alle Formatierungen (und möglicherweise auch Farben) enthält, und der Rest der Parameter sind Daten. Wenn Sie Text mit einem bestimmten Stil ausgeben möchten, ist es sinnvoll, alle Formatierungs- und Farb-Escapezeichen in die Formatzeichenfolge einzufügen. Beachten Sie, dass die Formatzeichenfolge als vertrauenswürdig gilt und niemals Benutzereingaben enthalten sollte.printf
besteht aus einer Formatzeichenfolge und einer Argumentliste, die entsprechend dem Format gedruckt wird. Sie sollten Farben als Teil der Formatzeichenfolge sehen und sie sollten daher zur Formatzeichenfolge gehören.Anstatt archaische Terminalcodes zu verwenden, kann ich die folgende Alternative vorschlagen. Es bietet nicht nur besser lesbaren Code, sondern ermöglicht es Ihnen auch, die Farbinformationen von den Formatspezifizierern getrennt zu halten, wie Sie es ursprünglich beabsichtigt hatten.
Siehe meine Antwort HIER für zusätzliche Farben
quelle
Das funktioniert bei mir:
Von
printf(1)
:quelle
Dies ist ein kleines Programm, um auf dem Terminal eine andere Farbe zu erhalten.
quelle
Dies ist eine kleine Funktion, die farbigen Text mithilfe von Bash-Skripten druckt. Sie können beliebig viele Stile hinzufügen und sogar Registerkarten und neue Zeilen drucken:
quelle
Ich verwende diesen C-Code zum Drucken der farbigen Shell-Ausgabe. Der Code basiert auf diesem Beitrag.
quelle
man printf.1
hat unten einen Hinweis: "... Ihre Shell hat möglicherweise eine eigene Version vonprintf
...". Diese Frage ist markiertbash
, aber wenn möglich, versuche ich, Skripte zu schreiben, die auf eine beliebige Shell portierbar sind .dash
in der Regel ist eine gute Mindeststandards für Portabilität - so die Antwort hier arbeitetbash
,dash
&zsh
. Wenn ein Skript in diesen 3 funktioniert, ist es höchstwahrscheinlich auf nahezu jeden Ort portierbar.Die neueste Implementierung der
printf
indash
[1] nicht kolorieren Ausgang ein bestimmter%s
Formatspezifizierer mit einem ANSI - Escape - Zeichen\e
- aber ein Spezifizierer Format%b
mit Oktal kombiniert\033
(entspricht einem ASCIIESC
) wird den Job erledigen. Bitte kommentieren Sie alle Ausreißer, aber AFAIK, alle Shells wurden implementiertprintf
, um die oktale ASCII-Teilmenge mindestens zu verwenden.Zum Titel der Frage "Verwenden von Farben mit printf" besteht die portabelste Methode zum Festlegen der Formatierung darin, den
%b
Formatbezeichner fürprintf
(wie in einer früheren Antwort von @Vlad angegeben) mit einem oktalen Escapezeichen zu kombinieren\033
.portable-color.sh
Ausgänge:
... und 'blau' ist in der zweiten Zeile blau.
Der
%-6s
Formatbezeichner aus dem OP befindet sich in der Mitte der Formatzeichenfolge zwischen den Steuerzeichenfolgen zum Öffnen und Schließen.[1] Ref:
man dash
Abschnitt "Builtins" :: "printf" :: "Format"quelle
quelle