Echo komutunda yazı tipini değiştirme


16

Yankı çıktısının font niteliklerini zsh veya bash olarak değiştirmek mümkün müdür?

Ne istiyorum benzer bir şey:

echo -n "This is the font: normal "
echo -n $font=italic "italic,"
echo -n $font=bold "bold,"
echo -n "and"
echo -n $font=small "small".

böylece yazdırır: "Bu yazı tipi: normal, italik , kalın , küçük " bir metin satırı içinde.


Bunun söz konusu terminal emülatörüyle kullanılan kabuğa kıyasla daha fazla etkisi vardır. Bu soru iş parçacığı, bence bazı değerli işaretçiler içerir
sr_

Normalde yazı tipi boyutunu değiştiremezsiniz. Genellikle yapabileceğiniz tek şey, rengi ve bazen de kalın / altı çizili özniteliği değiştirmektir. Bunun için ANSI kaçış dizilerini kullanabilirsiniz. Bazı örnekler için bkz . Bashguru.com/2010/01/shell-colors-colorizing-shell-scripts.html .
jofel

Yanıtlar:


15

Çoğu terminal öykünücüsü olmasa bile, farklı yazı tipi boyutları veya farklı yazı tipleri, yalnızca renkler ve birkaç özellik (kalın, altı çizili, çarpıcı) ayarlayamazsınız.

Bash'da (veya zsh veya başka bir kabukta), terminal kaçış dizilerini doğrudan kullanabilirsiniz (birkaç egzotik olanın dışında, tüm terminaller bu günlerde xterm'in öncülüğünü takip eder). CSI, bash ile ESC [yazılmıştır $'\e['. Öznitelikleri değiştirmek için çıkış sırası CSI Ps m.

echo $'\e[32;1mbold red\e[0mplain\e[4munderlined'

Zsh bunun için uygun bir işleve sahiptir.

autoload -U colors
colors
echo $bold_color$fg[red]bold red${reset_color}plain$'\e'$color[underline]munderlined

16

Bu renk tanımlarını bir komut dosyasına veya kaynak dosyaya ekleyebilirsiniz. Böyle bir şey olabilir.

#!/bin/bash
PATH=/bin:/usr/bin:

NONE='\033[00m'
RED='\033[01;31m'
GREEN='\033[01;32m'
YELLOW='\033[01;33m'
PURPLE='\033[01;35m'
CYAN='\033[01;36m'
WHITE='\033[01;37m'
BOLD='\033[1m'
UNDERLINE='\033[4m'

echo -e "This text is ${RED}red${NONE} and ${GREEN}green${NONE} and ${BOLD}bold${NONE} and ${UNDERLINE}underlined${NONE}."

tput sgr0

Değişikliği çağırdığınız her örnekten sonra ANSI renk kodlarını sıfırlamanız gerektiğine dikkat edin. tput sgr0Sıfırlar Eğer terminalde yaptığınız tüm değişiklikleri.

Yazı tipi boyutunu veya italik harfleri değiştirmenin kullandığınız terminale özgü olacağına inanıyorum.

Bu kılavuz bash isteminizi özelleştirmek için özel olsa da, renk kodları için iyi bir referanstır ve yapabilecekleriniz hakkında bazı fikirler üretir.


5

Düzen, [0x1b]önündeki -karakterini işleyemiyor gibi görünüyor [.

İlk satır kalın yapar:

 echo -e "\x1b[1m bold"
     echo -e "\x1b[30m black"
     echo -e "\x1b[31m red"
     echo -e "\x1b[32m green"
     echo -e "\x1b[33m yellow"
     echo -e "\x1b[34m blue"
     echo -e "\x1b[35m mag"
     echo -e "\x1b[36m cyan"
     echo -e "\x1b[37m white"   

Genel tip için sadece biliyorum

echo -e "\x1b[0m io-std"
echo -e "\x1b[1m bold"
echo -e "\x1b[2m normal"

ve yorumlardan teşekkürler, manatwork ve GypsyCosmonaut:

echo -e "\x1b[3m italic"
echo -e "\x1b[4m underlined"
echo -e "\x1b[5m blinking"
echo -e "\x1b[7m inverted"

ve io-std ve normal arasındaki farkı bilmiyorum.

Kabukta italik ya da küçük görmedim.

Sen tarafından (çok manatwork sayesinde) girebilirsiniz Ctrl + v ESC bunun gibi görüntülenir Bash, içinde ^[. Bu, tüm ANSI dizisinin ^[[1m boldveya ^[[1mbold('kalın' harfinden önceki boşluklardan kaçınmak) gibi görüneceği anlamına gelir .

Birçok editör (char) 0x1b ile ilgili problemlere sahiptir. Alternatifleri: bir yerden kopyalayın / yapıştırın veya kullanın

echo -e "\x1b[1m bold"

bash veya onaltılık bir editör.


1
Kaçış karakterleri yapabilirsiniz yazılmalıdır: Ctrl + V, Esc. (“^ [” Olarak görüntülenecektir. Bu, tüm ANSI dizisinin “^ [[1mbold” gibi görüneceği anlamına gelir.)
manatwork

1
Bahsetmek için daha fazla özellik var: \e[4maltı çizili, \e[5myanıp sönen, \e[7mters çevrilmiş.
manatwork

@manatwork: onları ekledi.
kullanıcı bilinmiyor

@userunknown Kodunuzla uğraştığınız için teşekkürler, italik buldumecho -e "\x1b[3m italic"
GypsyCosmonaut

0

Buraya:

http://en.wikipedia.org/wiki/ANSI_escape_code

(not: birçoğu genellikle işe yaramaz, ancak bunların çoğu bu şekilde işaretlenir.)

Terminalde bir oyun yapıyorum ve yukarıdaki bağlantıya büyük ölçüde güveniyorum. Hatta imleci nasıl gizleyeceğinizi / göstereceğinizi, renk (30'lar), "kalın" (daha açık), daha koyu, altı çizili, italik, arka plan rengini (30'lar yerine 40'lar) vb. çok yararlı - örneğin, "\x1B[1A"imleci bir satır yukarı "\x1B[0;0H"taşır; imleci 0, sütun 0'a taşır; "\x1B[2J"ekranı "\x1B[2K"temizler; satırı temizler.

İnsanların söylediği gibi amaçlarınız için:

echo -e "\x1b[30;44m black with blue background \x1b[m"

echo -e "\x1b[31;42m red with green background \x1b[m"

echo -e "\x1b[32;40m green with black background \x1b[m"

echo -e "\x1b[8m Invisible; na na na na boo boo \x1b[m"

Not: Eğer ihtiyaç-e içinde

echo **-e** "\x1b[35;1m Light purple \x1b[m"

veya tek tırnak kullanmanız gerekir. Tip man echoçift tırnak baskı genellikle ağrı neden (görmek için, ben işlerim gerektiğinde genişletmek veya Bunun kolay olduğu için tek tırnak kullanmak, ANSI çıkış sırasını gerekmez - Bu kadar defalarca yapmaktan buna alışmış olsa da - -e unutmak için hangi durumda " box with numbers and letters[35; 1m" olsun).

Her gördüğünüzde (veya veya ) CSIile değiştirin . Bence daha standart, ama aralarındaki farkın ne olduğunu gerçekten bilmiyorum."\x1b[""\e[""\u1b[""\x1b["


Dizelerinizi ekstra karakterlerle karıştırmaktan hoşlanıyorsanız, \ e :-) kullanmayın
clearlight

@clearlight Ne demek istediğinden emin değilim. Sanırım "kullan \ e" demek istemiş olabilirsiniz. Ancak, bulduğumdan \edaha az destekleniyor \x1b. Yapılacak en uygun şey ya esc=$'\e'ya esc=$'\x1b'(bu bash'tır) ve sonra kullanmaktır "${esc}[34;1m"(örneğin, parlak mavi). Burada yarı karmaşık bir örneğim var ( github.com/dylnmc/ps1porn/blob/master/powerline.sh ) gerçek bir bash komut istemi dizesi için;) Lütfen repo adını affedin - freenode kanalındaki insanlara teşekkür edebilirsiniz. bunun için archlinux-offtopic.
Dylan

Bunun nedeni esc=$'\e', bash'ın ansi-escape karakterini yerinde oluşturmasına izin vermesidir ve bundan birkaç şekilde faydalanırsınız. Bazen, aslında, (aynı github bağlantı gösterilmiştir) kullanarak, sahip Düzgün bir şekilde gösterilmesi için renk elde etmek için bu yöntemi kullanmak. Sh kabuğunun yanı sıra sh kabuğunun eski sürümleri için, renk göstermek için bu yöntemi kullanmanız gerekir (ancak buna gerek yoktur) ... terminalin çoğu modern terminalin yaptığı kaçış dizilerini kullandığı kabul edilir.
Dylan
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.