Nos .*rc
arquivos das pessoas que vejo on-line ou em vários códigos, tenho a tendência de ver muitas pessoas que usam manualmente as seqüências de escape ANSI em vez de usar tput
.
Eu tinha o entendimento de que tput
é mais universal / seguro, então isso me faz pensar:
Existe alguma razão objetiva para usar seqüências de escape no lugar de tput
? (Portabilidade, robustez em erros, terminais incomuns ...?)
terminal
escape-characters
tput
Capitão Homem
fonte
fonte
printf
seqüências de escape ANSI, mastput
falha (pelo menos na minha caixa).Respostas:
tput
pode lidar com expressões (por exemplo, emsgr
esetaf
) que o shell-scripter típico consideraria menos que utilizável. Para ter uma idéia do que está envolvido, consulte a saídainfocmp
com a-f
opção (formatação) aplicada. Aqui está um exemplo de como usar essas strings das descrições terminfo do xterm :A formatação divide as coisas - um script ou programa para fazer o mesmo teria que seguir essas reviravoltas. A maioria das pessoas desiste e apenas usa as cordas mais fáceis.
O recurso de 16 cores é emprestado do IBM aixterm, que mapeia 16 códigos para primeiro e segundo plano em dois intervalos;
Um script simples
e a saída mostram como funciona:
Os números são divididos porque o aixterm usa os intervalos 30-37 e 40-47 para corresponder às cores ECMA-48 (também conhecidas como "ANSI") e usa o intervalo 90-107 para códigos não definidos no padrão.
Aqui está uma captura de tela com xterm using
TERM=xterm-16color
, onde você pode ver o efeito.Leitura adicional:
infocmp
- compare ou imprima descrições terminfotput
,reset
- inicializa um terminal ou consulta o banco de dados terminfoaixterm
Comandofonte
Vindo de uma época em que as plataformas UNIX podiam ter uma variedade de dispositivos conectados a elas, eu ainda prefiro tput e seus amigos do que sequências de escape literais.
Eu acho que a verdadeira razão é que a maioria das pessoas simplesmente não conhece
tput
e seusterminfo
/termcap
arquivos e bibliotecas associados .fonte
Um dos motivos é que
tput
é o comando externo, portanto, pode ser executado mais lentamente que os códigos de escape do shell interno. Outra coisa é que é possível criar facilmente um liners combinando códigos de escape ANSI com caracteres de escape específicos do shell, como nobash
prompt, por exemplo:Da mesma forma em
zsh
:Aqui tudo é claro e compacto. Com
tput
um seria necessário dividi-lo em várias linhas ou torná-lo muito mais longo e complexo, executandotput
várias vezes, etc.fonte
PS1="$(tput setaf 2)\u@\h$(tput reset) >
$(tput sgr0)
para o final, mas concordar que a tput é uma melhoria.