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.

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


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

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


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 )

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.