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.
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
.
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:
u
- indica o nome do utilizador;h
- indica o nome do anfitrião;w
- indica o nome do diretório de trabalho;O que mais pode ser enviado no prompt:
d
- a data, no formato "Wed Dec 28";A
- hora, no formato 24 horas;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: