O comando tput

O artigo apresenta o comando "tput", uma ferramenta poderosa para personalizar a saída do terminal no Linux. Explora a alteração das cores do texto e do fundo como negrito, itálico, sublinhado e piscante, tudo de forma simples e eficiente.

[ Hits: 2.219 ]

Por: Luciano Hanzo em 02/07/2024


Introdução



O terminal, a ferramenta mais utilizada no Linux, onde podemos instalar programas, atualizar o sistema, verificar processos, criar diretórios, criar usuários e muito mais. Sendo a melhor coisa que podemos fazer no terminal é a criação de scripts, com scripts podemos fazer de tudo que o Linux oferece de maneira prática, imagine-se digitando diversos comandos para chegar no seu objetivo final. No script todos os comandos já estão digitados, um script é simplesmente um arquivo de texto com vários comandos sequências em que o terminal executa linha por linha.

Muitos programadores criam seus scripts de maneira na qual o usuário final só executa, fazendo com que nenhuma informação aparece na tela, mesmo assim o script cumpre o que promete. Um script bem elaborado mostra mensagens na tela mostrando que a execução terminou com sucesso ou que deu alguma coisa errada ou até mesmo, pedi para o usuário digitar alguma informação no terminal.

Sempre da para melhorar mais, e uma dessas melhorias é o tput, com o tput é possível deixar a saída do comando com fonte colorida (foreground), com uma cor de fundo (background), a fonte em negrito, itálico e sublinhado ou até mesmo com o texto piscado.

Como usar o comando tput

Agora mostrarei alguns comandos utilizando o tput.

Deixa a fonte do texto com a cor vermelha:

tput setaf 1 ; echo "Vermelho" ; tput sgr0

Vamos entender o que aconteceu, primeiro chamo o comando tput depois coloco a opção setaf, o setaf indica que a cor da fonte será substituída, depois o número 1 que indica vermelho. Continuando o ponto e vírgula para executar o próximo comando, echo para mostrar uma mensagem na tela seguido de "Vermelho" que será a mensagem a ser exibida na tela. Continuando de novo com o ponto e virgula, colocando o comando tput de novo com a opção sgr0, a opção sgr0 serve para limpar todas as cores definidas com setaf 1.

Nesse exemplo o fundo fica amarelo e a fonte vermelha:

tput setab 11 setaf 1 ; echo "Fundo Amarelo" ; tput sgr0

Repare no primeiro tput onde pode ser colocado duas opções em sequência, setab 11 deixa o fundo amarelo, enquanto setaf 1 deixa a fonte vermelha.

Comando que retorna o total de cores no terminal:

tput colors

Ao total são 256 cores sendo que começa do 0 até 255.

Comando para sublinhar uma palavra na saída do terminal:

echo -n "Essa " ; tput smul ; echo -n "palavra" ; tput sgr0 ; echo " está sublinhada."

Deixa a palavra em negrito:

echo -n "Essa " ; tput bold ; echo -n "palavra" ; tput sgr0 ; echo " está em negrito."

Deixa a palavra em itálico:

echo -n "Essa " ; tput sitm ; echo -n "palavra" ; tput sgr0 ; echo " está em itálico."

Deixa a palavra piscando:

echo -n "Essa " ; tput blink ; echo -n "palavra" ; tput sgr0 ; echo " está piscando."

Um detalhe muito importante é colocar o comando tput sgr0 após personalizar a palavra, caso contrário o resto ficará personalizado, até mesmo o nome_user@nome_pc também ficará personalizado.

Agora prepare-se para encher de cores o seu terminal, isso é uma demonstração de todas as cores no terminal.

Enche o seu terminal de cores BackGround bugadas:

for i in $(seq 0 255); do tput setab $i; printf "BackGround %03d\n" $i; tput sgr0; done

Nesse exemplo mostro o background todo colorido em um laço de repetição, infelizmente não saiu como o esperado, após algumas iterações o terminal fica todo bugado. Para resolver isso é só colocar um comando após o tput sgr0, nunca finalize o laço com sgr0, quando estiver utilizando setab no seu script.

Enche o seu terminal de cores BackGround padronizadas:

for i in $(seq 0 255); do tput setab $i; printf "BackGround %03d" $i; tput sgr0; echo; done

Repare que nesse exemplo removi o (\n) do printf e coloquei o echo no final para pular linha a cada iteração.

Enche o terminal de ForeGround com cores padronizadas:

for i in $(seq 0 255); do tput setaf $i; printf "ForeGround %03d\n" $i; tput sgr0; done

Nesse exemplo com cor da fonte (foreground) não foi necessário colocar um comando após o sgr0, os bugs só acontecem nas cores de fundo (background).

Script

Um script que mostra algumas cores.

#!/bin/bash

for i in $(seq 0 16); do
   tput setab $i
   printf "BackGround %02d" "$i"
   tput sgr0 ; echo -n " | "
   
   tput setaf $i
   printf "ForeGround %02d" "$i"
   tput sgr0 ; echo
done

Agora nesse script mostro como usar o tput interagindo com o usuário de maneira simples.

#!/bin/bash

clear
echo -n "1 - " ; tput setaf 1 bold
echo -n "Vermelho   " ; tput sgr0
tput setab 1 ; echo "                  " ; tput sgr0

echo -n "2 - " ; tput setaf 2 sitm
echo -n "Verde       " ; tput sgr0
tput setab 2 ; echo "                  " ; tput sgr0

echo -n "3 - " ; tput setaf 4 smul
echo -n "Azul" ; tput sgr0 ; echo -n "         "
tput setab 4 ; echo "                  " ; tput sgr0

echo
read -p "Qual a sua cor preferida ? : " Escolha

if [ $Escolha -eq 1 ]; then
   clear
   echo -n "Sua cor preferida é " ; tput setaf 1 bold
   echo "vermelho" ; tput sgr0
elif [ $Escolha -eq 2 ]; then
   clear
   echo -n "Sua cor preferida é " ; tput setaf 2 bold
   echo "verde" ; tput sgr0
elif [ $Escolha -eq 3 ]; then
   clear
   echo -n "Sua cor preferida é " ; tput setaf 4 bold
   echo "azul" ; tput sgr0
else
   clear
   tput blink ; echo -n "$Escolha " ; tput sgr0
   tput smul ; echo "opção inválida!" ; tput sgr0
fi

Finalizando

O tput é uma maneira de personalizar a saída do terminal, existe outras simplesmente usando o comando echo ou printf, infelizmente com os comandos echo ou printf, tem que ser colocado um monte de caracteres e decorar um tabela de cores para fazer a personalização.

Exemplo usando o comando echo:

echo -e "\033[5;3;31;107m Texto vermelho, piscante, itálico com fundo branco \033[m"

Ainda existe algumas outras opções com o tput, como capturar a quantidade de linhas e colunas no terminal.

Exemplo de uma linha amarela exata no terminal:

tput setab 11; printf "%$(tput cols)s\n" ; tput sgr0

Agradecimentos

Em primeiro lugar minha família, toda a comunidade linux por compartilhar conhecimento e ao Julio Cezar Neves, tudo que mostro aqui aprendi no livro dele PROGRAMAÇÃO SHELL LINUX. E finalmente a você, sem você para ler, tudo o que eu digitei estaria perdido no limbo.
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Criando um servidor SFTP

Leitura recomendada

Processamento Paralelo em Shell Script - Conversão de Arquivos WAV para MP3

Aviso de queda de Internet via Sendxmpp

Desligar servidores quando o nobreak entra na bateria e envio de aviso por e-mail

Blacklist - O que é? Como consultar o IP? Como automatizar?

Aprendendo a melhorar os seus scripts

  
Comentários
[1] Comentário enviado por maurixnovatrento em 20/07/2024 - 17:35h

tput é muito bom mesmo.
______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts