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.222 ]

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

Enviando mensagens de WhatsApp no Linux usando Shell Script e ADB

Simples sistema de backup com acesso remoto

Monitoramento de pops para provedores

Receba seu IP externo via e-mail ou ensine o bash a ler e enviar e-mails

GNU Parallel: criando atividades em paralelo com shell script

  
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