AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 790414
Accepted
Barry Chapman
Barry Chapman
Asked: 2025-02-01 00:40:41 +0800 CST2025-02-01 00:40:41 +0800 CST 2025-02-01 00:40:41 +0800 CST

Imprima os códigos de cores do bash em ordem de matiz de cor

  • 772

Encontrei várias postagens sobre cores em terminais bash, mas queria saber se havia uma maneira de imprimir detalhadamente o código de cor junto com uma amostra dessa cor em ordem de matiz.

Agora, se você imprimisse uma grade de cores no bash, obteria algo como:

grade de imagem

Onde vai assim:

  • preto para um azulado
  • azul mais escuro para um azulado mais claro
  • ligeiramente azul esverdeado até um azulado ainda mais claro...
  • vermelho escuro a roxo-azulado...
  • verde para um azul-ciano claro
  • ... e assim por diante

Como você pode ver, ele parece pular na ordem das cores, e eu entendo isso - ele está usando um método hexadecimal de geração de cores (R, G, B), onde ele está iterando pelas cores de 0 a 256 para cada coluna.

Acho que minha pergunta é - existe uma biblioteca, ou algo que possa colocar as cores na ordem em que aparecem por matiz. Ou seja, vai do preto ao branco e incluindo cores como se fosse exibir um espectro?

EDIT: Código de amostra da grade de cores:

#!/bin/bash
function colorgrid()
{
    end=250
    for((red=0; red <= end; red+=75)); do
        for((green=0; green <= end; green+=75)); do
            for style in 0 "1;3"; do
                for((blue=0; blue <= end; blue+=5)); do
                    printf "\e[$style;38;2;$red;$green;${blue}mH"
                done
                printf "\e[0m\n"
            done
        done
    done
}
bash
  • 2 2 respostas
  • 100 Views

2 respostas

  • Voted
  1. Best Answer
    jesse_b
    2025-02-01T19:03:54+08:002025-02-01T19:03:54+08:00

    Acho que é isso que você está procurando:

    #!/bin/bash
    
    hsltorgb () {
        local hue=$1
        local light=$2
    
        local c x m
        read c x m < <(awk -v H="$hue" -v L="$light" '
            function abs(v) { return (v < 0) ? -v : v }  # Define abs()
            BEGIN {
                C = (1 - abs(2*L/100 - 1)) * 1;  # S=1 (full saturation)
                X = C * (1 - abs((H/60) % 2 - 1));
                m = L/100 - C/2;
                print C, X, m;
            }'
        )
    
        local r=0 g=0 b=0
        if (( hue < 60 )); then 
            r=$c; g=$x; b=0
        elif (( hue < 120 )); then 
            r=$x; g=$c; b=0
        elif (( hue < 180 )); then r=0; 
            g=$c; b=$x
        elif (( hue < 240 )); then r=0; 
            g=$x; b=$c
        elif (( hue < 300 )); then r=$x; 
            g=0; b=$c
        else 
            r=$c; g=0; b=$x
        fi
    
        printf "%d;%d;%d" $(awk -v r=$r -v g=$g -v b=$b -v m=$m \
            'BEGIN { printf "%d %d %d", (r+m)*255, (g+m)*255, (b+m)*255 }')
    }
    
    huegrid () {
        local width=80  # Number of colors per row
        local height=20 # Number of rows
    
        for ((y=0; y<height; y++)); do
            for ((x=0; x<width; x++)); do
                hue=$((360 * x / width))  # Hue from 0 to 360
                light=$((100 - (y * 100 / height)))  # Lightness from 100% to 0%
    
                rgb=$(hsltorgb "$hue" "$light")
                printf "\033[48;2;%sm " "$rgb"
            done
            echo -e "\033[0m"
        done
    }
    
    huegrid
    

    Isso funciona usando HSL para determinar a próxima cor, pois é uma representação mais linear da matriz de cores. Então, convertemos HSL para RGB para imprimir no terminal.

    altura e largura podem ser ajustadas para obter mais ou menos granularidade na matriz de cores resultante.

    Exemplo de saída: insira a descrição da imagem aqui

    • 5
  2. headless_chicken_wings
    2025-02-09T18:21:16+08:002025-02-09T18:21:16+08:00

    Este está no meu local/bin há algum tempo. Parece marcar a maioria das suas caixas e é simples o suficiente para modificar.

    #!/usr/bin/bash
    
     for x in 0 1 4 5 7 8; do
      for i in {30..37}; do
       for a in {40..47}; do
        printf "\e[$x;$i;$a""m\\\e[$x;$i;$a""m\e[0;37;40m "
       done
       echo
      done
     done
    echo
    
    • 0

relate perguntas

  • exportar variáveis ​​​​env programaticamente, via stdout do comando [duplicado]

  • Problema estranho ao passar variáveis ​​do arquivo de texto

  • Enquanto a linha lê mantendo os espaços de escape?

  • ordem de substituição de processos `te` e `bash`

  • Execute um script muito lento até que seja bem-sucedido

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve