Em geral, é impossível obter as cores atuais. O processamento da sequência de controle de um terminal acontece "dentro" do terminal, onde quer que esteja. Com um emulador de terminal como xterm
aquele ou construído em um kernel do sistema operacional que fornece os terminais virtuais do kernel, o estado interno do emulador, incluindo sua noção da "representação gráfica" atual (cor e atributos), está na máquina em si e é teoricamente acessível. Porém, para um terminal real, essas informações estão em algum local de RAM em uma máquina fisicamente separada conectada por um link serial.
Dito isto, alguns terminais incluem um mecanismo para ler essas informações como parte de seu protocolo de terminal, que é enviado através desse link serial. Eles fornecem sequências de controle que um programa pode enviar para o terminal, que faz com que ele retorne informações sobre seu estado interno, como entrada do terminal. mikeserv
mostrou as seqüências de controle às quais o xterm
emulador de terminal responde. Mas estes são específicos para xterm
. Os emuladores de terminal integrados no kernel Linux e os vários kernels BSD são diferentes tipos de terminal, por exemplo, e não implementam nenhuma dessas seqüências de controle. O mesmo vale para famílias inteiras de terminais reais.
Os terminais DEC VT525 implementam um mecanismo de leitura, mas possuem um conjunto de seqüências de controle que não têm relação com as utilizadas por xterm
. Um envia a sequência DECRQSS (Solicitar seleção ou configuração) para solicitar a representação gráfica atual e o terminal responde enviando o DECRPSS (Seleção ou configuração de relatório). Especificamente:
- O host envia: DCS
$
q
m
ST (DECRQSS com a parte da função de controle do SGR como a configuração)
- O terminal responde: DCS
0
$
r
0
;
3
3
;
4
4
m
ST (DECRPSS com os parâmetros e a função de controle parte de uma sequência de controle SGR que define as cores atuais do primeiro plano e do segundo plano)
Obviamente, uma leitura cuidadosa da sua pergunta revela que você está sacudindo uma banana com cobertura de chocolate nos sistemas monetários europeus novamente. O que você está realmente tentando fazer, para o qual você selecionou uma solução e depois perguntou como fazer parte dessa solução, é preservar o estado anterior enquanto você escreve alguma saída colorida. Não apenas existe uma sequência de controle DEC VT para fazer isso, mas também uma sequência de terminal do console SCO que é reconhecida por xterm
vários emuladores de terminal integrados ao kernel e uma entrada termcap / terminfo que informa o que eles são para o seu terminal.
As entradas do termcap são sc
e rc
. As entradas terminfo são save_cursor
e restore_cursor
. Os nomes são um tanto enganadores quanto ao efeito (embora eles atuem como um aviso de que você está confiando em algo que é de fato, e não de jure ). As seqüências de controle DECSC, DECRC, SCOSC e SCORC atuais também salvam e restauram a representação gráfica atual.
Dado que o artigo que você apontou tem como objetivo gerar seqüências de controle a partir de shell scripts, o comando que você está procurando agora é tput
.
Leitura adicional
echotc Co
ouechoti colors
, mas simplesmente não existe uma variável que armazene a definição atual do código de cores.