Bagaimana cara satu teks tebal dicetak di Bash?

241

Saya sedang menulis skrip Bash yang mencetak beberapa teks ke layar:

echo "Some Text"

Bisakah saya memformat teks? Saya ingin membuatnya berani.

JamesRat
sumber

Jawaban:

427

Cara paling kompatibel untuk melakukan ini adalah menggunakan tputuntuk menemukan urutan yang tepat untuk dikirim ke terminal:

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

maka Anda dapat menggunakan variabel $bolddan $normalmemformat hal-hal:

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

memberi

ini berani tapi ini tidak

psmears
sumber
2
Cukup bagus. Jika saya mengerti benar, ini sama dengan memasukkan lolos, tetapi akan bekerja di terminal lain (bukan VT100).
JamesRat
Itu benar - itu mencari kode yang sesuai sesuai dengan nilai TERM.
psmears
2
Jika Anda perlu menggarisbawahi teks, Anda bisa menambahkan variabel. Perhatikan, backticks sedang dihapus dari format komentar. Gunakan format yang sama dalam jawabannya. tput smul
UNDERLINE
3
tputadalah perintah yang bagus dengan banyak perintah untuk berbagai tugas.
Drew Noakes
Saya mencoba sesuatu yang mirip dengan apa yang dilakukan OP, tetapi dengan sebuah motdfile. Bagaimana / di mana saya akan mendefinisikan $bolddan $normalvariabel dalam contoh itu?
Matt
74

Untuk menerapkan gaya pada string Anda, Anda dapat menggunakan perintah seperti:

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

Penjelasan:

  • echo -e - -eOpsi ini berarti bahwa string yang lolos (backslashed) akan ditafsirkan
  • \ 033 - urutan lolos mewakili awal / akhir dari gaya
  • huruf kecil m - menunjukkan akhir urutan
  • 1 - Atribut tebal (lihat di bawah untuk lebih lanjut)
  • [0m - mengatur ulang semua atribut, warna, pemformatan, dll.

Bilangan bulat yang mungkin adalah:

  • 0 - Gaya Normal
  • 1 - Tebal
  • 2 - Dim
  • 3 - Miring
  • 4 - Digarisbawahi
  • 5 - Berkedip
  • 7 - Mundur
  • 8 - Tak Terlihat
avivamg
sumber
1
Penjelasan yang bagus. Sedang mencari-cari apa yang [0mmenawarkan fungsi dan ini menjelaskannya dengan baik
Jeremy
Padahal seharusnya\033[0m
Jeremy
1
3- cetak miring , setidaknya dalam konsole
David Tabernero M.
Satu keinginan Strikethrough didukung di Ubuntu dan beberapa platform populer lainnya.
Dark Star1
45

Saya berasumsi bash sedang berjalan pada terminal yang kompatibel dengan vt100 di mana pengguna tidak secara eksplisit mematikan dukungan untuk pemformatan.

Pertama, aktifkan dukungan untuk karakter khusus di echo, menggunakan -eopsi. Kemudian, gunakan urutan pelarian ansi ESC[1m, seperti:

echo -e "\033[1mSome Text"

Lebih lanjut tentang urutan pelarian ansi misalnya di sini: ascii-table.com/ansi-escape- berikutnyaences-vt-100.php

Michał Trybus
sumber
Terima kasih. Saya menemukan beberapa daftar urutan pelarian lainnya, tetapi yang Anda tautkan sangat luas!
JamesRat
18
Jangan lupa untuk berhenti memformat tebal di akhir string: echo -e "\033[1mSome Text\033[0m"jika tidak, baris berikut terminal Anda juga akan dicetak tebal
mems
Solusi ini bekerja bahkan dengan PHP-CLI, itu merupakan keunggulan dibandingkan solusi lainnya.
David
jika Anda kesulitan mengingat \033Anda dapat menggunakan \esepertiecho -e "\e[1msome text\e[0m"
Felipe Alvarez
1
Urutan melarikan diri oktal diizinkan dalam JS (JavaScript)
Pat-Laugh
14

Secara teori seperti itu:

# 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. 

Tetapi dalam praktiknya itu dapat ditafsirkan sebagai warna "intensitas tinggi".

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

roufamatic
sumber