É possível alterar os atributos de fonte da saída de eco no zsh ou no bash?
O que eu gostaria é algo parecido com:
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".
para que imprima: "Esta é a fonte: normal, itálico , negrito , pequeno " em uma linha de texto.
Respostas:
Na maioria, se não em todos os emuladores de terminal, você não pode definir tamanhos ou fontes diferentes, apenas cores e alguns atributos (negrito, sublinhado, destaque).
No bash (ou no zsh ou em qualquer outro shell), você pode usar as seqüências de escape do terminal diretamente (além de algumas exóticas, todos os terminais seguem o exemplo do xterm atualmente).
CSI
éESC [
escrito$'\e['
em bash. A sequência de escape para alterar atributos éCSI Ps m
.O Zsh tem uma função conveniente para isso.
fonte
Você pode incluir essas definições de cores em um script ou arquivo de origem. Poderia ser algo como isto.
Observe que você deve redefinir os códigos de cores ANSI após cada instância que você chama uma alteração. As
tput sgr0
redefinições de todas as mudanças que você fez no terminal.Acredito que alterar o tamanho da fonte ou o itálico seria específico para o terminal que você está usando.
Embora este guia seja específico para personalizar seu prompt do bash, é uma boa referência para códigos de cores e gera algumas idéias sobre o que você pode fazer.
fonte
Parece que o layout não pode lidar com o
[0x1b]
caractere na frente do[
.A primeira linha fica em negrito:
Para o tipo geral, eu sei apenas
e pelos comentários, obrigado manatwork e GypsyCosmonaut:
e não sabe a diferença entre io-std e normal.
Eu não vi itálico ou pequeno no shell.
Você pode inseri-los (graças à manatwork também) por Ctrl + v ESC no Bash, onde será exibido como
^[
. Isso significa que toda a sequência ANSI terá a aparência^[[1m bold
ou^[[1mbold
(para evitar o espaço em branco antes de 'negrito').Muitos editores têm problemas com (char) 0x1b. Alternativas: copie / cole em algum lugar ou use
no bash ou em um editor hexadecimal.
fonte
\e[4m
sublinhado,\e[5m
piscando,\e[7m
invertido.echo -e "\x1b[3m italic"
Aqui:
http://en.wikipedia.org/wiki/ANSI_escape_code
(nota: muitos deles geralmente não funcionam, mas a maioria deles é marcada assim.)
Estou fazendo um jogo no terminal e confiei bastante no link acima. Ele também mostra como ocultar / exibir o cursor, tornar a cor (anos 30), "negrito" (mais claro), mais escuro, sublinhado, itálico, cor de plano de fundo (anos 40 em vez de anos 30), etc. Você também pode alterar a localização do cursor ( o que é muito útil - por exemplo,
"\x1B[1A"
move o cursor para cima uma linha;"\x1B[0;0H"
move o cursor para a linha 0, col 0;"\x1B[2J"
limpa a tela;"\x1B[2K"
limpa a linha.Para seus propósitos, como as pessoas disseram:
Nota: Você precisa o
-e
emou você precisa usar aspas simples. Digite
man echo
para saber por que (aspas duplas geralmente são difíceis de imprimir; quando preciso que as coisas não sejam expandidas ou sequências de escape ANSI), uso aspas simples porque é fácil - mesmo que eu me acostumei a fazê-lo tantas vezes - para esquecer o -e , nesse caso, você obtém "box with numbers and letters
[35; 1m").Toda vez que você vir
CSI
substituí-lo por"\x1b["
(ou"\e["
ou"\u1b["
)."\x1b["
Eu acho que é mais padrão, mas eu realmente não sei qual é a diferença entre eles.fonte
\e
é menos suportado do que\x1b
eu encontrei. A melhor coisa a fazer seriaesc=$'\e'
ouesc=$'\x1b'
( ou seja, no bash) e depois usar"${esc}[34;1m"
(por exemplo, azul brilhante). Eu tenho um exemplo semi-complexo aqui ( github.com/dylnmc/ps1porn/blob/master/powerline.sh ) para uma sequência real de prompt do bash;) Perdoe o nome do repositório - você pode agradecer às pessoas no canal do freenode # archlinux-offtopic para isso.esc=$'\e'
isso é que isso permite que o bash crie o personagem ansi-escape no local, e você se beneficia dele de várias maneiras. Às vezes, de fato (como é demonstrado no link do github), você precisa usar esse método para fazer com que a cor apareça corretamente. Para versões mais antigas do bash e do sh shell, você deve (mas não precisa) usar esse método para que a cor apareça ... desde que o terminal use as seqüências de escape que os terminais mais modernos fazem.