Bir çıktı Bash'de nasıl kalın metin oluşturur?


241

Ekrana bazı metinler basan bir Bash betiği yazıyorum:

echo "Some Text"

Metni biçimlendirebilir miyim? Cesur yapmak istiyorum.

Yanıtlar:


427

Bunu yapmanın en uyumlu yolu tputterminale göndermek için doğru dizileri bulmaktır:

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

değişkenleri $boldve $normalşeyleri biçimlendirmek için kullanabilirsiniz :

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

verir

bu cesur ama bu değil


2
Oldukça şık. Doğru anlarsam, Bu çıkışları eklemekle aynıdır, ancak diğer terminallerde (VT100'de değil) çalışır.
JamesRat

Bu doğru - TERM değerine göre uygun kodları arar.
psmears

2
Metnin altını çizmeniz gerekiyorsa, bir değişken ekleyebilirsiniz. Dikkat edin, geri işaretler yorum biçimlendirmesinden kaldırılır. Yanıtta aynı biçimi kullanın. tput smul
UNDERLINE

3
tputile büyük bir komuttur komutları sürü birçok farklı görevler için.
Drew Noakes

OP'nin ne yaptığına benzer bir şey yapmaya çalışıyorum, ancak bir motddosyayla. Bu örnekte $boldve $normaldeğişkenlerini nasıl / nerede tanımlayabilirim ?
Matt

74

Dizenize bir stil uygulamak için aşağıdaki gibi bir komut kullanabilirsiniz:

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

Açıklama:

  • echo -e - -eSeçenek, çıkış karakterli (ters eğik çizgili) dizelerin yorumlanacağı anlamına gelir
  • \ 033 - kaçan sıra, stilin başlangıcını / sonunu temsil eder
  • küçük m - dizinin sonunu gösterir
  • 1 - Kalın özellik (daha fazla bilgi için aşağıya bakın)
  • [0m - tüm nitelikleri, renkleri, biçimlendirmeyi vb. Sıfırlar.

Olası tamsayılar:

  • 0 - Normal Stil
  • 1 - Kalın
  • 2 - Sönük
  • 3 - İtalik
  • 4 - Altı Çizili
  • 5 - Yanıp sönüyor
  • 7 - Geri
  • 8 - Görünmez

1
İyi açıklama. İşlevselliğin neler [0msunduğuna bakıyordum ve bu da bunu iyi açıklıyor
Jeremy

Olmasına rağmen\033[0m
Jeremy

1
3- italik , en azından konsole içinde
David Tabernero M.

Bir dilek üstü çizmek Ubuntu ve diğer bazı popüler platformlarda desteklendi.
Dark Star1

45

Bash'ın, kullanıcının biçimlendirme desteğini açıkça kapatmadığı vt100 uyumlu bir terminalde çalıştığını varsayıyorum.

İlk olarak, seçeneğini echokullanarak özel karakterler için desteği açın -e. Daha sonra, ansi kaçış dizisini kullanın ESC[1m, örneğin:

echo -e "\033[1mSome Text"

Ansi kaçış dizileri hakkında daha fazla bilgiyi burada bulabilirsiniz: ascii-table.com/ansi-escape-sequences-vt-100.php


Teşekkürler. Başka kaçış dizileri listesi buldum, ancak bağlandığınız çok geniş!
JamesRat

18
Dizenin sonunda kalın biçimlendirmeyi durdurmayı unutmayın: echo -e "\033[1mSome Text\033[0m"aksi takdirde terminalinizin aşağıdaki satırları da kalın olacaktır
14'te

Bu çözüm PHP-CLI ile bile çalışır, bu diğer çözümlere karşı bir avantajdır.
David

Sorun hatırlamakta varsa \033kullanabileceğiniz \egibiecho -e "\e[1msome text\e[0m"
Felipe Alvarez

1
Sekizli kaçış dizisine JS (JavaScript)
Pat-Laugh

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.