Ist es möglich, die Schriftattribute der Ausgabe von echo in zsh oder bash zu ändern?
Was ich möchte, ist etwas Ähnliches wie:
echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".
so dass es gedruckt wird: "Dies ist die Schriftart: normal, kursiv , fett , klein " innerhalb einer Textzeile.
Antworten:
Auf den meisten, wenn nicht allen Terminalemulatoren können Sie keine unterschiedlichen Schriftgrößen oder Schriftarten, nur Farben und einige Attribute (fett, unterstrichen, hervorgehoben) festlegen.
In bash (oder in zsh oder einer anderen Shell) können Sie die terminalen Escape-Sequenzen direkt verwenden (bis auf einige exotische folgen heutzutage alle Terminals den Anweisungen von xterm).
CSI
istESC [
,$'\e['
in Bash geschrieben. Die Escape-Reihenfolge zum Ändern von Attributen lautetCSI Ps m
.Zsh hat dafür eine bequeme Funktion .
quelle
Sie können diese Farbdefinitionen in ein Skript oder eine Quelldatei einfügen. Könnte ungefähr so aussehen.
Beachten Sie, dass Sie die ANSI-Farbcodes nach jedem Aufrufen einer Änderung zurücksetzen sollten. Das
tput sgr0
setzt alle Änderungen zurück, die Sie im Terminal vorgenommen haben.Ich glaube, dass das Ändern der Schriftgröße oder der Kursivschrift spezifisch für das von Ihnen verwendete Terminal ist.
Während dieses Handbuch speziell für das Anpassen Ihrer Bash-Eingabeaufforderung gedacht ist, ist es eine gute Referenz für Farbcodes und generiert einige Ideen für mögliche Aktionen.
quelle
Scheint so, als ob das Layout das
[0x1b]
-Zeichen vor dem nicht verarbeiten kann[
.Die erste Zeile macht fett:
Für den allgemeinen Typ weiß ich nur
und aus den Kommentaren, danke manatwork und GypsyCosmonaut:
und kenne den Unterschied zwischen io-std und normal nicht.
Ich habe weder Kursiv noch Klein in der Shell gesehen.
Sie können sie (auch dank Handarbeit) mit Ctrl + v ESC in den Bash eingeben , wo sie als angezeigt werden
^[
. Dies bedeutet, dass die gesamte ANSI-Sequenz wie^[[1m bold
oder aussieht^[[1mbold
(um das Leerzeichen vor "fett" zu vermeiden).Viele Editoren haben Probleme mit (char) 0x1b. Alternativen: Kopieren / Einfügen von irgendwoher oder Verwenden
in Bash oder einem Hex-Editor.
quelle
\e[4m
unterstrichen,\e[5m
blinkend,\e[7m
invertiert.echo -e "\x1b[3m italic"
Hier:
http://en.wikipedia.org/wiki/ANSI_escape_code
(Hinweis: Viele von ihnen funktionieren normalerweise nicht, die meisten sind jedoch so gekennzeichnet.)
Ich mache ein Spiel im Terminal und habe mich stark auf den obigen Link verlassen. Hier erfahren Sie sogar, wie Sie den Cursor ein- und ausblenden, Farbe (30er), "Fett" (heller), dunkler, unterstrichen, kursiv, Hintergrundfarbe (40er statt 30er) usw. festlegen können. Sie können auch die Position des Cursors ändern ( Das ist sehr hilfreich. Bewegt beispielsweise
"\x1B[1A"
den Cursor eine Zeile nach oben,"\x1B[0;0H"
bewegt den Cursor auf Zeile 0, Spalte 0,"\x1B[2J"
löscht den Bildschirm und"\x1B[2K"
löscht die Zeile.Für Ihre Zwecke, wie die Leute gesagt haben:
Hinweis: Sie benötigen den
-e
inoder Sie müssen einfache Anführungszeichen verwenden. Geben Sie ein, um
man echo
zu sehen, warum (doppelte Anführungszeichen sind normalerweise ein Problem beim Drucken; wenn ich benötige, dass Inhalte nicht erweitert werden, oder wenn ich ANSI-Escape-Sequenzen benötige, verwende ich einfache Anführungszeichen, obwohl ich mich so oft daran gewöhnt habe - um das -e zu vergessen. In diesem Fall erhalten Sie "box with numbers and letters
[35; 1m").Jedes Mal, wenn Sie es sehen,
CSI
ersetzen Sie es durch"\x1b["
(oder"\e["
oder"\u1b["
)."\x1b["
Ich denke, es ist mehr Standard, aber ich weiß nicht wirklich, was der Unterschied zwischen ihnen ist.quelle
\e
aber weniger unterstützt als\x1b
ich gefunden habe. Das Optimalste wäre entwederesc=$'\e'
oderesc=$'\x1b'
(dies ist in Bash) und dann"${esc}[34;1m"
(für z. B. hellblau). Ich habe hier ein halbkomplexes Beispiel ( github.com/dylnmc/ps1porn/blob/master/powerline.sh ) für einen echten Bash-Prompt-String. Archlinux-offtopic dafür.esc=$'\e'
ist, dass bash den Ansi-Escape-Charakter an Ort und Stelle erstellen kann und Sie auf verschiedene Arten davon profitieren. Manchmal in der Tat (wie im Github Link gezeigt wird), Sie haben auf diese Methode verwenden , um Farbe zu erhalten , richtig zu zeigen. Für ältere Versionen von bash sowie für die sh-Shell sollten Sie diese Methode verwenden (aber nicht müssen), um Farbe anzuzeigen ... vorausgesetzt, das Terminal verwendet die Escape-Sequenzen, die die meisten modernen Terminals verwenden.