isso pode não ter uma cor "legal" com base no plano de fundo, mas deve funcionar, supondo que a cor de plano de fundo padrão seja sempre cor 0 :
tput setaf $(hostname | sum | awk -v ncolors=$(infocmp -1 | expand | sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*//p") 'ncolors>1 {print 1 + ($1 % (ncolors - 1))}')
Para quebrar isso:
-
tput- imprime uma string de controle de terminal -
setaf- a string de controle do terminal; nesse caso,set ANSI foreground -
$(...)- substituição de comando BASH nestable para o parâmetro color-
hostname- obter o nome do host -
sum- calcula uma soma de verificação simples no nome do host -
awk... -
-v ncolors=$(...)- configura a variável AWKncolorspara o valor da substituição do comando em$(...)-
infocmp -1- exibe as informações do terminal sobre o tipo de terminal atual com 1 parâmetro por linha -
expand- expanda as guias para espaços para facilitar o scriptsed -
sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*//p"- extrai o valor da capacidade do terminal integercolors
-
-
'ncolors>1 {...}'- o script awk, que executa o código{...}somente sencolorsfor maior que 1-
print 1 + ($1 % (ncolors - 1))- pega o$1absoluto (o campo 1 da entrada, que é proveniente desum, que significa$1é o valor da soma de verificação), localiza seu resto após ser dividido por(ncolors - 1)(que tem o efeito de limitá-lo ao intervalo0a(ncolors - 2)), adicione1e imprima.
-
-