Wie gibt man fett gedruckten Text in Bash aus?

241

Ich schreibe ein Bash-Skript, das Text auf den Bildschirm druckt:

echo "Some Text"

Kann ich den Text formatieren? Ich würde es gerne mutig machen.

JamesRat
quelle

Antworten:

427

Der kompatibelste Weg, dies zu tun, besteht tputdarin, die richtigen Sequenzen zu ermitteln, die an das Terminal gesendet werden sollen:

bold=$(tput bold)
normal=$(tput sgr0)

dann können Sie die Variablen verwenden $boldund $normalDinge formatieren:

echo "this is ${bold}bold${normal} but this isn't"

gibt

das ist mutig, aber das ist nicht

psmears
quelle
2
Das ist ziemlich geschickt. Wenn ich das richtig verstehe, entspricht dies dem Einfügen der Escapezeichen, funktioniert jedoch in anderen Terminals (nicht in VT100).
JamesRat
Das ist richtig - es sucht die entsprechenden Codes entsprechend dem Wert von TERM.
psmears
2
Wenn Sie Text unterstreichen müssen, können Sie eine Variable hinzufügen. Beachten Sie, dass die Backticks aus der Kommentarformatierung entfernt werden. Verwenden Sie in der Antwort dasselbe Format. UNDERLINE =tput smul
Jayem
3
tputist ein großartiger Befehl mit vielen Befehlen für viele verschiedene Aufgaben.
Drew Noakes
Ich versuche etwas Ähnliches wie das OP, aber mit einer motdDatei. Wie / wo würde ich die $boldund $normalVariablen in dieser Instanz definieren?
Matt
73

Um einen Stil auf Ihre Zeichenfolge anzuwenden, können Sie einen Befehl wie den folgenden verwenden:

echo -e '\033[1mYOUR_STRING\033[0m'

Erläuterung:

  • echo -e - Die -eOption bedeutet, dass maskierte (umgekehrte) Zeichenfolgen interpretiert werden
  • \ 033 - Escape-Sequenz repräsentiert den Anfang / das Ende des Stils
  • Kleinbuchstabe m - gibt das Ende der Sequenz an
  • 1 - Fettgedrucktes Attribut (siehe unten für mehr)
  • [0m - setzt alle Attribute, Farben, Formatierungen usw. zurück.

Die möglichen ganzen Zahlen sind:

  • 0 - Normaler Stil
  • 1 - Fett
  • 2 - Abm
  • 3 - Kursiv
  • 4 - Unterstrichen
  • 5 - Blinken
  • 7 - Rückwärts
  • 8 - Unsichtbar
avivamg
quelle
1
Gute Erklärung. Ich habe mich nach den Funktionen [0mumgesehen und das erklärt es gut
Jeremy
Obwohl es sein sollte\033[0m
Jeremy
1
3- kursiv , zumindest in konsole
David Tabernero M.
Man wünscht sich, Strikethrough würde auf Ubuntu und einigen anderen beliebten Plattformen unterstützt.
Dark Star1
45

Ich gehe davon aus, dass bash auf einem vt100-kompatiblen Terminal ausgeführt wird, in dem der Benutzer die Unterstützung für die Formatierung nicht explizit deaktiviert hat.

Aktivieren Sie zunächst die Unterstützung für Sonderzeichen in echomit der -eOption. Verwenden Sie später die Ansi-Escape-Sequenz ESC[1mwie:

echo -e "\033[1mSome Text"

Mehr zu Ansi-Escape-Sequenzen zum Beispiel hier: ascii-table.com/ansi-escape-sequences-vt-100.php

Michał Trybus
quelle
Vielen Dank. Ich habe einige andere Listen von Escape-Sequenzen gefunden, aber die, mit der Sie verlinkt haben, ist sehr umfangreich!
JamesRat
18
Vergessen Sie nicht, die Fettdruckformatierung am Ende der Zeichenfolge echo -e "\033[1mSome Text\033[0m"zu
beenden. Andernfalls sind
Diese Lösung funktioniert auch mit PHP-CLI, das ist ein Vorteil gegenüber anderen Lösungen.
David
Wenn Sie Probleme haben, sich zu erinnern \033, können Sie \ewieecho -e "\e[1msome text\e[0m"
Felipe Alvarez
1
Die oktale Escape-Sequenz ist in JS (JavaScript) erlaubt
Pat-Laugh
14

In der Theorie so:

# BOLD
$ echo -e "\033[1mThis is a BOLD line\033[0m"
This is a BOLD line

# Using tput
tput bold 
echo "This" #BOLD
tput sgr0 #Reset text attributes to normal without clear.
echo "This" #NORMAL

# UNDERLINE
$ echo -e "\033[4mThis is a underlined line.\033[0m"
This is a underlined line. 

In der Praxis kann es jedoch stattdessen als Farbe mit "hoher Intensität" interpretiert werden.

(Quelle: http://unstableme.blogspot.com/2008/01/ansi-escape-sequences-for-writing-text.html )

roufamatisch
quelle