
Escrevo:
$ infocmp -1 xterm ... cores#8, negrito=\E[1m, piscar=\E[5m, ... $ tput -Txterm cores && echo OK || eco errar 8 OK $ tput -Txterm pisca && echo OK || eco errar ^[[5mOK
Então eu posso usartputpara verificar as capacidades retinais.
Este soution é portátil? Existem outras soluções?
Ou talvez eu possa ficar com a solução:
$ [ $TERM = xterm ] && echo ok || eco errar OK
Um uso é definir PS1 em .bashrc. Outro para destacar a saída para chamar a atenção do script sh. Eu posso usar essa solução:
PS1='bash#' caso "$TERM" em xterm*)PS1='\[\033[35m\]bash# \[\033[0m\]' ;; esac
que usa apenas o comando interno do bash (tão eficiente) e funciona para todos os meus casos, mas infelizmente não é portátil.
Responder1
O uso tput
é portátil para um grande número de sistemas operacionais.
No entanto, a verificação do código de retorno informa apenas se o banco de dados terminfo da plataforma possui uma definição desse recurso em sua entrada para 'xterm'.
O código de retorno não informa se o cliente 'xterm' usado atualmente realmente suporta esse recurso.
Observe que há uma grande variedade de programas de software que afirmam sercompatível com 'xterm'. É certamente provável que nem todos eles suportem todos os recursos do 'xterm', especialmente considerando que houve várias versões consecutivas da implementação de referência do xterm lançadas e provavelmente alguns forks. O mantenedor do xterm diz "Nenhum implementa metade dos controles do xterm."
Até onde eu sei, nenhum dos órgãos de padronização habituais (ANSI, ECMA, The Open Group) publicou um padrão que defina xterm. O atual mantenedor do xterm também mantém umprograma de teste vt100 (vttest)para ajudar em seu trabalho xterm.
Portanto, provavelmente não há como um aplicativo fazer uso do valor TERM para ter certeza de que um terminal alegado ser um xterm realmente suporta um recurso específico do xterm. Pelo menos não para qualquer escolha arbitrária do recurso xterm. Se você envolver um humano (pelo que me lembro, o vttest fez), você poderá ter uma chance melhor.
Responder2
Sim, é portátil. Que tal agora:
# BASH : Configure things differently if current terminal has >= 8 colors.
if which tput > /dev/null 2>&1 && [[ $(tput -T$TERM colors) -ge 8 ]]; then
echo "Configure stuff to use colors here!"
else
echo "No tput or less than 8 colors, default to no coloring"
fi