Leia atentamente a página wiki em códigos de escape ANSI ; você poderia usar \e[46m
etc
Se eu usar o modo 0
, podemos definir a cor da fonte e do plano de fundo, shuc as
echo -e "\e[0;31;47m teststring \e[0m"
Maseuesperousarumacoropostaparaserumacordefundo(achoqueéciano).Entãoeuquerousaromodo7
(modo7
teráumfundooposto).Masnãottrabalhesempre:
Qualquer corpo pode me dizer como usar este modo?
Leia atentamente a página wiki em códigos de escape ANSI ; você poderia usar \e[46m
etc
\e[7m
é o código para vídeo reverso (também usado frequentemente para o modo standout ) na maioria dos terminais. O que isso faz é substituir a cor do plano de fundo pela cor do primeiro plano e a cor do primeiro plano pela cor do plano de fundo, e não pelo vídeo reverso como em um negativo fotográfico.
Para o negativo fotográfico, alguns terminais suportam o seguinte:
\e[38;2;RED;GREEN;BLUEm # for foreground
\e[48;2;RED;GREEN;BLUEm # for background
seqüências de escape, onde RED
, GREEN
, BLUE
é um número decimal de 0 a 255. Isso indica ao terminal para escolher uma cor na paleta mais próxima da especificação RGB.
Então você poderia fazer:
straight_color() {
printf '[48;2;%s;%s;%sm[38;2;%s;%s;%sm' "$@"
}
negative_color() {
for c do
set -- "$@" "$((255 - c))"
shift
done
straightcolor "$@"
}
E, por exemplo,
straight_color 255 0 0 255 255 255
Para primeiro plano branco brilhante em fundo vermelho brilhante e:
negative_color 255 0 0 255 255 255
para o negativo (preto em ciano claro).
A melhor maneira de lidar com isso é usar a biblioteca terminfo
. É muito mais fácil do que lembrar códigos de escape e, geralmente, menos propensos a erros. (Também é agnóstico de terminal, mas suspeito que seja improvável que você esteja usando um dispositivo de terminal não-ANSI atualmente.)
# Use reversed colours
tput smso
echo hello, world
tput rmso
Você pode até colocar os códigos em variáveis programaticamente, como este
smso=$(tput smso)
rmso=$(tput rmso)
echo "${smso}Hello again${rmso}"
Também há controles de cores usando tput setf {colour}
e tput setb {colour}
. (Pesquisa man terminfo
para "Color Handling".) Estes são mais complicados, então eu costumo usar um pequeno script para lidar com eles
colour blue yellow
echo this is blue on yellow
Aqui está o script
#!/bin/sh
#
# Take a pair of colours and set the foreground and background,
# respectively.
#
########################################################################
#
NULL=/dev/null
fg="$1"
bg="$2"
########################################################################
# Translate a colour name to the corresponding ANSI index value
#
colourNo ()
{
case "$1" in
black|0) echo 0 ;;
blue|1) echo 1 ;;
green|2) echo 2 ;;
cyan|3) echo 3 ;;
red|4) echo 4 ;;
magenta|5) echo 5 ;;
yellow|6) echo 6 ;;
white|7) echo 7 ;;
esac
return
}
########################################################################
# Go
#
if test "X$1" = 'X-?'
then
progname='basename "$0"'
echo "Usage: $progname [<fg_colour>|- [bg_colour]]" >&2
exit 1
fi
if test -n "$fg" -a "X$fg" != "X-"
then
colour='colourNo "$fg"'
test -n "$colour" && tput setf "$colour"
fi
if test -n "$bg" -a "X$bg" != "X-"
then
colour='colourNo "$bg"'
test -n "$colour" && tput setb "$colour"
fi
exit 0
Tags echo