Formas de pagamento Abuse

Cores do terminal Linux

26.09.2021, 22:47

A vantagem do Linux é que se pode personalizar tudo o que se quiser. Esta é a vantagem dos sistemas projectivos sobre os sistemas processuais. É uma espécie de construtor constituído por blocos individuais, cada um dos quais pode ser personalizado à vontade.

É especialmente interessante se não nos limitarmos a copiar soluções prontas, mas tentarmos compreender o que e como funciona. E mesmo quando se resolve uma tarefa frívola, aprende-se algo novo.

Colorir as cores do resultado

Por exemplo, você quer ajustar as cores do terminal linux na saída do comando ls.

A partir da documentação do ls você pode entender que a definição das cores para a saída é feita usando o utilitário dircolors, que ou define os parâmetros de cor a partir de sua própria base de dados ou os pega do arquivo ~/.dircolors. Também foi mencionado que a inicialização da utilização das cores é feita através de ~/.bashrc, o ficheiro de definições da shell, e que os próprios parâmetros são definidos através da variável LC_COLORS.

O seguinte script foi encontrado em .bashrc:

A sua essência é verificar a presença do utilitário dircolors no sistema, atribuir um valor à variável e, se bem sucedido, utilizar o parâmetro --color=auto cada vez que o ls é chamado.

Se você executar o utilitário dircolors, ele produzirá o valor da variável LC_COLOR.

Também é possível produzir o valor da variável LC_COLORS de forma estruturada, especificando a chave:

$ dircolors -p

Como a saída é longa, não a darei aqui.

Se redirecionar a saída dircolors -p > ~/.dircolors, será criado um ficheiro estruturado do qual serão retiradas as definições de cor. Ao editar este ficheiro e definir as definições de cor para o output ls.

No ficheiro .dircolors criado há uma dica:

Definindo a sequência através de ponto e vírgula obtemos a cor que precisamos na consola linux, de acordo com a listagem. As cores do terminal linux vão de 30 a 37 para a cor da fonte, e de 40 a 47 para o fundo. Por exemplo:

DIR 01;34 implica que os nomes dos diretórios estarão a negrito e a azul.

Mas desta forma obtém apenas oito cores, e os emuladores de terminal modernos são capazes de mostrar pelo menos 256.

Existem outras formas de definir a cor. Por exemplo, EXEC 38;5;208;1 dá uma fonte laranja grossa para ficheiros executáveis.

Para não ter que passar pelas cores do Linux manualmente, existe uma tabela de cores pronta

Substituindo o valor da cor 38;5;x - onde x é a cor da tabela, obtemos o resultado necessário. Obtém-se algo como isto:

Como é que isto funciona? A questão é que a definição da cor da informação de saída no emulador de terminal é feita com a ajuda dos códigos de escape ANSI. Trata-se de uma determinada sequência de caracteres que não é impressa no ecrã, mas que afecta a saída. Chama-se assim porque começa com [ - código "Esc". Uma vez que existem muitos terminais e emuladores de terminais, estes códigos de controlo são normalizados. O controlo de cores através da sequência de 30 a 37 é a norma ECMA-48. Pode encontrar informações sobre esta norma na secção códigos_consola.

Colorir a linha de convite

Uma vez que você entendeu como definir as cores do linux através dos códigos esc, é fácil redesenhar e colorir o prompt. A variável PS1, definida no ficheiro ~/.bashrc, é responsável pelo seu output

No Linux Mint, o script para a inicializar tem o seguinte aspeto:

Ou seja, primeiro é determinado se o script foi executado pelo root ou por um utilizador normal. Como na grande maioria dos casos é a segunda opção, a linha a seguir ao primeiro 'else' deve ser editada. O formato da linha é decifrado na documentação do bash, na secção "Promting". Implica que a sequência de esc deve começar com "[" e terminar com "]". Assim:

  • [[01;32m] - define a cor verde;
  • u - indica o nome do utilizador;
  • h - indica o nome do anfitrião;
  • [[00m] - limpa os atributos definidos;
  • [[01;34m] - define a cor azul;
  • w - indica o nome do diretório de trabalho;
  • Olá - um exemplo de que qualquer texto derivado pode ser emitido.

O que mais pode ser enviado no prompt:

  • d - a data, no formato "Wed Dec 28";
  • A - hora, no formato 24 horas;
  • ! - número do comando atual no histórico;
  • - transferência da saída para outra linha;

Vamos introduzir algo mais interessante:

PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '

E a linha de prompt será parecida com: