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.

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


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

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


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 )

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.