Estou tentando imprimir um texto no terminal usando o comando echo.
Quero imprimir o texto em vermelho. Como eu posso fazer isso?
linux
bash
command-line
echo
terminal-color
satheesh.droid
fonte
fonte
Respostas:
Você pode usar estes códigos de escape ANSI :
E depois use-os assim em seu script:
que imprime
love
em vermelho.No comentário de @ james-lim, se você estiver usando o
echo
comando, use o sinalizador -e para permitir escapes de barra invertida .(não adicione
"\n"
ao usar eco, a menos que você queira adicionar uma linha vazia adicional)fonte
\e[0;31mHello Stackoverflow\e[0m
echo
para ativar escapes de barra invertida.\x1B
vez de\e
.\033
seria bom para todas as plataformas.for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Você pode usar o
tput
comando awesome (sugerido na resposta de Ignacio ) para produzir códigos de controle de terminal para todos os tipos de coisas.Uso
tput
Subcomandos específicos são discutidos posteriormente.Direto
Chame
tput
como parte de uma sequência de comandos:Use em
;
vez de fazê-&&
lo, se ostput
erros ainda aparecerem no texto.Variáveis do shell
Outra opção é usar variáveis de shell:
tput
produz seqüências de caracteres que são interpretadas pelo terminal como tendo um significado especial. Eles não serão mostrados eles mesmos. Observe que eles ainda podem ser salvos em arquivos ou processados como entrada por outros programas que não o terminal.Substituição de comando
Pode ser mais conveniente inserir
tput
a saída diretamente em suasecho
strings usando a substituição de comando :Exemplo
O comando acima produz isso no Ubuntu:
Comandos em primeiro plano e em segundo plano
As cores são as seguintes:
Há também versões não-ANSI das funções de ajuste de cores (
setb
em vez desetab
, esetf
em vez desetaf
) que usam números diferentes, não dadas aqui.Comandos no modo de texto
Comandos de movimento do cursor
Limpar e inserir comandos
Outros comandos
Com janelas trémulas Compiz , o
bel
comando faz com que a oscilação do terminal por um segundo para chamar a atenção do usuário.Scripts
tput
aceita scripts contendo um comando por linha, que são executados em ordem antes dastput
saídas.Evite arquivos temporários repetindo uma sequência de várias linhas e transmitindo-a por canal:
Veja também
man 1 tput
man 5 terminfo
a lista completa de comandos e mais detalhes sobre essas opções. (Otput
comando correspondente está listado naCap-name
coluna da tabela enorme que começa na linha 81.)fonte
$()
é uma substituição de comando . Tudo otput af 1
que é gerado é gerar a sequência de códigos de cores, mas os códigos não são caracteres imprimíveis, portanto, digitartput af 1
sozinho produzirá uma linha de saída em branco.ncurses
tput
cores, consulte esta resposta no Unix StackExchangereset=`tput sgr0`
deveria serreset=`tput sgr 0`
, com um espaço.algumas variáveis que você pode usar:
o caractere de escape em bash , hex e octal, respectivamente:
pequeno exemplo:
exceção do bash:
Se você vai usar esses códigos em suas variáveis especiais do bash
você deve adicionar caracteres de escape extras para que baterpode interpretá-los corretamente. Sem isso, adicionar caracteres de escape extras funciona, mas você terá problemas ao usar
Ctrl + r
para pesquisar em seu histórico.regra de exceção para bash
Você deve adicionar
\[
antes de qualquer código ANSI inicial e\]
depois de qualquer código final.Exemplo:
em uso regular:
\033[32mThis is in green\033[0m
para PS0 / 1/2/4:
\[\033[32m\]This is in green\[\033[m\]
\[
é para o início de uma sequência de caracteres não imprimíveis\]
é para o final de uma sequência de caracteres não imprimíveisDica: para memorizá-lo, você pode primeiro adicionar
\[\]
e depois colocar seu código ANSI entre eles:-
\[start-ANSI-code\]
-
\[end-ANSI-code\]
tipo de sequência de cores:
Antes de mergulhar nessas cores, você deve conhecer quatro modos com estes códigos:
1. modo de cor
Ele modifica o estilo da cor NÃO do texto. Por exemplo, torne a cor mais clara ou mais escura.
0
Redefinir1;
mais leve que o normal2;
mais escuro que o normalEste modo não é suportado amplamente. É totalmente compatível com o Gnome-Terminal.
2. modo de texto
Este modo é para modificar o estilo do texto NÃO da cor.
3;
itálico4;
sublinhado5;
piscando (lento)6;
piscando (rápido)7;
reverter8;
ocultar9;
descartare são quase suportados.
Por exemplo, o KDE-Konsole suporta,
5;
mas o Gnome-Terminal não e o Gnome,8;
mas o KDE não.3. modo de primeiro plano
Este modo é para colorir o primeiro plano.
4. modo de fundo
Este modo é para colorir o fundo.
A tabela abaixo mostra um resumo da versão de 3/4 bits da cor ANSI
A tabela abaixo mostra um resumo da versão de 8 bits da cor ANSI
O teste rápido de 8 bits:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
A tabela abaixo mostra um resumo da versão de 24 bits da cor ANSI
algumas capturas de tela
resumo de 8 bits em primeiro plano em um
.gif
resumo de 8 bits em segundo plano em um
.gif
resumo de cores com seus valores
blinking
no terminal KDEum
C
código simples que mostra maisuma ferramenta mais avançada que desenvolvi para lidar com essas cores:
foto no modo de cor
foto em modo texto
combinar é bom
mais tiros
Dicas e truques para usuários e programadores avançados:
Podemos usar esses códigos em uma linguagem de programação?
Sim você pode. Eu experimentei embater, c, c ++, d perl, Pitão
Eles estão diminuindo a velocidade de um programa?
Eu acho que não.
Podemos usá-los no Windows?
3/4-bit Sim, se você compilar o código com
gcc
algumas capturas de tela no Win-7
Como calcular o comprimento do código?
\033[
= 2, outras partes 1Onde podemos usar esses códigos?
Em qualquer lugar que tem um
tty
intérpretexterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
e assim por diante.Por exemplo, se você quiser colorir sua saída com mysql, você pode usar
Perl
armazene esse código em um nome de arquivo:
pcc
(= Perl Colorize Character) e, em seguida, coloque o arquivo a em válidoPATH
e use-o onde quiser.ls | pcc
df | pcc
dentro
mysql
primeiro registre-opager
e tente:Ele não lidar com Unicode.
Esses códigos apenas colorizam?
Não, eles podem fazer muitas coisas interessantes. Tentar:
ou:
Muitos iniciantes desejam limpar a tela
system( "clear" )
para que você possa usá-lo em vez desystem(3)
ligarEles estão disponíveis no Unicode?
Sim.
\u001b
Qual versão dessas cores é preferível?
É fácil de usar
3/4-bit
, mas é muito preciso e bonito de usar24-bit
.Se você não tem experiência comhtmlentão aqui está um tutorial rápido:
24 bits significa:
00000000
e00000000
e00000000
. Cada 8 bits é para uma cor específica.1..8
é para e9..16
para e17..24
paraEntão, emhtml
#FF0000
significa e aqui está:255;0;0
emhtml
#00FF00
significa que aqui está:0;255;0
Isso faz sentido? que cor você deseja combiná-lo com esses três valores de 8 bits.
referência: seqüências de escape ANSI da
Wikipedia tldp.org tldp.org misc.flogisoft.com alguns blogs / páginas da web que não me lembro
fonte
x1B[
para eliminá-lo.Use
tput
com asetaf
capacidade e um parâmetro de1
.fonte
\033[31m
irá quebrar a biblioteca readline em alguns dos terminais.i
limite superior do aumento para obter mais tons):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(em alpino)O
[31m
controla a cor do texto:30
-37
define a cor do primeiro plano40
-47
define a cor de fundoUma lista mais completa de códigos de cores pode ser encontrada aqui .
É uma boa prática redefinir a cor do texto
\033[0m
no final da sequência.fonte
Acabei de juntar as boas capturas em todas as soluções e acabei com:
E você pode simplesmente chamá-lo como:
fonte
Este é o interruptor de cores
\033[
. Veja a história .Os códigos de cores são como
1;32
(verde claro),0;34
(azul),1;34
(azul claro) etc.Encerramos as seqüências de cores com um comutador de cores
\033[
e0m
o código sem cores. Assim como abrir e fechar guias em uma linguagem de marcação.echo
Solução de função de cor simples :fonte
text
variáveltext="$color${@: 2}${code}0m"
dessa maneira, toda a linha, exceto o parâmetro color, será colorida.Uma maneira pura de mudar de cor apenas para um
echo
é definir essa função:Uso:
Ou você pode usar diretamente os códigos de cores mencionados na resposta de Drew :
fonte
-n
a ecoar, então você pode usá-lo como corante em linhaecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Use
tput
para calcular códigos de cores. Evite usar o código de escape ANSI (por exemplo,\E[31;1m
para vermelho) porque é menos portátil. O Bash no OS X, por exemplo, não é compatível.fonte
Esta pergunta foi respondida repetidamente :-) mas por que não.
A primeira utilização
tput
é mais portátil em ambientes modernos do que a injeção manual de códigos ASCII através deecho -E
Aqui está uma função rápida do bash:
Agora você pode usar:
para obter:
Notas sobre portabilidade de
tput
O primeiro
tput(1)
código-fonte foi carregado em setembro de 1986tput(1)
está disponível na semântica do X / Open curses na década de 1990 (o padrão de 1997 tem a semântica mencionada abaixo).Então, é ( bastante ) onipresente.
fonte
tput
? Está disponível na maioria dos servidores em que não há direitos de administrador para instalá-lo? Você tem um link para onde essa técnica foi "inventada" pela primeira vez?$PS1
sem\[...\]
as peças não espaçadoras ? Continue usando os marcadores Bash PS1 com as strings de tput.Obrigado a @ k-five por esta resposta
Resultado
Espero que esta imagem ajude você a escolher sua cor para sua festança: D
fonte
Se você estiver usando
zsh
oubash
Experimente on-line
fonte
Podemos usar cores verdadeiras de 24 bits RGB para texto e plano de fundo!
Exemplo de texto em vermelho e tag de fechamento:
Gerador:
Mostrar snippet de código
É seguro usar nos meus scripts?
Sim! Os terminais de 8 e 16 bits exibirão apenas como cor substituta na faixa da paleta disponível, mantendo o melhor contraste, sem quebras!
Além disso, ninguém notou a utilidade do vídeo reverso do código ANSI 7 .
Ele fica legível em qualquer esquema de terminal, cores, fundo preto ou branco ou outras paletas de fantasia, trocando as cores de primeiro e segundo plano.
Exemplo, para um fundo vermelho que funciona em qualquer lugar:
É assim que se parece ao alterar os esquemas internos do terminal:
Este é o script de loop usado para o gif.
Consulte https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
fonte
Esses códigos funcionam na minha caixa do Ubuntu:
Isso imprime as letras abcd todas em cores diferentes:
For loop:
fonte
Eu encontrei a resposta incrível de Shakiba Moshiri enquanto procurava informações sobre esse tópico ... então eu tive uma idéia ... e acabou em uma função bastante agradável extremamente fácil de usar (
então eu tenho que compartilhar)
https://github.com/ppo/bash-colors
Uso:
$(c <flags>)
dentro de umecho -e
ouprintf
Exemplos:
fonte
Para legibilidade
Se você deseja melhorar a legibilidade do código, você pode
echo
primeiro a string e depois adicionar a cor mais tarde usandosed
:fonte
Minha resposta favorita até agora é colouredEcho.
Apenas para postar outra opção, você pode conferir esta pequena ferramenta xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
você o usa como grep, e ele colorirá seu stdin com uma cor diferente para cada argumento, por exemplo
Observe que ele aceita qualquer expressão regular que o sed aceitará.
Esta ferramenta usa as seguintes definições
Eu uso essas variáveis nos meus scripts assim
fonte
Para expandir esta resposta , para os preguiçosos de nós:
fonte
tput
; é para isso que serve!tput
parasc
erc
embora (salvar cursor, restaurar cursor). Embora essa resposta me chame de "preguiçoso", poderia ser reformulado como "prático" ou "direto ao ponto".para mostrar a saída da mensagem com cores diferentes, você pode fazer:
fonte
Você definitivamente deve usar tput sobre sequências de controle ANSI brutas.
de http://wiki.bash-hackers.org/scripting/terminalcodes
Dito isso, escrevi uma pequena biblioteca auxiliar chamada bash-tint , que adiciona outra camada à parte superior da tput, tornando ainda mais simples o uso (imho):
Exemplo:
tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
Daria o seguinte resultado:
fonte
Em vez de codificar códigos de escape específicos do seu terminal atual, você deve usar
tput
.Este é o meu script de demonstração favorito:
fonte
Estou usando isso para impressão em cores
Todas as cores básicas são definidas como vars e também existem algumas funções úteis: XY, linha e que. Crie esse script em um dos seus e use todos os recursos e funções de cores.
fonte
E é isso que eu costumava ver todas as combinações e decidir qual fica legal:
fonte
Eu escrevi ganhos para conseguir exatamente isso.
Você pode apenas fazer
Agora você pode instalar todos os comandos de escape como arquivos txt em um determinado destino via:
Ou ainda mais fácil via:
Qual instalará as cores para
~/.colors
.Ou você os usa assim:
Ou assim, o que acho realmente mais interessante:
Confira no asciinema !
fonte
Aqui está um pequeno script simples, reuni recentemente, que colorirá qualquer entrada canalizada em vez de usar "Toilet".
File: color.bsh
Em seguida, chame-o de cor vermelha (196):
$> echo "text you want colored red" | color.bsh 196
fonte
Referir-se:
fonte
Aqui está a solução mais simples e legível. Com bashj ( https://sourceforge.net/projects/bashj/ ), você simplesmente escolheria uma destas linhas:
256x256x256
cores estão disponíveis se você tiver o suporte de cores em seu aplicativo de terminal.fonte
depois de misturar outras soluções do thread,
npm scripts
veja como eu consegui obter cores na saída (gitbash CLI):fonte
Assim como algo um pouco lá fora, passar pelo grep o destacará como vermelho (mas apenas vermelho). Você também pode usar pipes nomeados para que sua string fique mais próxima do final da linha:
fonte
Esta resposta está correta, exceto que a chamada para cores não deve estar dentro das aspas.
Deve fazer o truque.
fonte
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Portanto, é o mesmo para o bash.