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 AWKncolors
para 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 sencolors
for maior que 1-
print 1 + ($1 % (ncolors - 1))
- pega o$1
absoluto (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 intervalo0
a(ncolors - 2)
), adicione1
e imprima.
-
-