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.