Isso é impossível. Eu não sou um especialista que conhece protocolos de terminal de forma exaustiva, mas estou ciente da existência de terminais que não têm como alterar a cor de fundo. Este é o caso, por exemplo, de terminais burros como os fornecidos por esperados ou por M-x shell
no Emacs. Este também é o caso da maioria dos terminais de hardware, mas poucas pessoas usam esses recursos hoje em dia.
A maioria dos emuladores de terminal tem uma maneira de alterar a cor do plano de fundo. Emuladores de terminal em geral copiam o xterm para a interface entre o aplicativo e o terminal, portanto, quando você quiser um recurso como este, tente a maneira xterm e espere que ele funcione em alguns, mas não em todos os emuladores de terminal. Procure as seqüências de controle xterm e veja se elas se encaixam no que você deseja.
Para alterar a cor de fundo de todo o terminal, há OSC 11; color
BEL , ou seja,
printf '\e]11;%s\a' "$color"
Isso funciona em xterm, urxvt, gnome-terminal, konsole e lxterm, mas não em rxvt, xfce4-terminal, terminator ou Emacs M-x term
. A mudança de cor de fundo sobrevive a uma reinicialização do terminal. Você também pode alterar a cor do primeiro plano substituindo 11;
por 10;
.
Essa é a cor de fundo padrão, é claro. Em qualquer terminal que suporte essa seqüência de escape e na maioria dos outros terminais que suportam cores de qualquer maneira, você pode alternar a cor de segundo plano para o texto exibido subseqüentemente com \e[41m
(para vermelho).
Se a sequência de escape não for suportada em um terminal, você não terá como descobrir. Você pode tentar encontrar uma seqüência de escape que consulte o terminal e que seja suportada no mesmo conjunto de terminais, mas geralmente não existe essa sequência.
Mudar para reverter vídeo com \e[?5h
provavelmente funciona na maioria dos terminais, mas isso não sobrevive a uma reinicialização do terminal. Você poderia fazer isso e depois definir a cor do primeiro plano, assim haveria um efeito visual na maioria dos terminais.