Как получить обратный фон с помощью эха

Если я использую режим 0 , мы можем установить цвет шрифта и цвет фона, shuc as

 echo -e "\e[0;31;47m teststring \e[0m" 

Но я надеюсь использовать противоположный цвет как цвет фона (я думаю, это голубой). Так что я хочу использовать режим 7 (режим 7 получит противоположный фон). Но он не работает всегда:

Любое тело может сказать мне, как использовать этот режим?

3 Solutions collect form web for “Как получить обратный фон с помощью эха”

Прочтите внимательно wikipage по кодам escape-кода ANSI ; вы можете использовать \e[46m т. д.

\e[7m – это код для обратного видео (также часто используемый для режима выдачи ) в большинстве терминалов. То, что делает, хотя и заменяет цвет фона цветом переднего плана и цветом переднего плана цветом фона, это не обратное видео, как в фотографическом негативе.

Для фотографического негатива несколько терминалов поддерживают:

 \e[38;2;RED;GREEN;BLUEm # for foreground \e[48;2;RED;GREEN;BLUEm # for background 

escape-последовательностей, где RED , GREEN , BLUE – десятичное число от 0 до 255. Это говорит терминалу, что он выбирает цвет в своей палитре, которая ближе всего к этой спецификации RGB.

Таким образом, вы можете сделать:

 straight_color() { printf '\33[48;2;%s;%s;%sm\33[38;2;%s;%s;%sm' "$@" } negative_color() { for c do set -- "$@" "$((255 - c))" shift done straightcolor "$@" } 

И тогда, например:

 straight_color 255 0 0 255 255 255 

Для яркого белого переднего плана на ярко-красном фоне и:

 negative_color 255 0 0 255 255 255 

для отрицательного (черный на ярко-голубой).

Лучший способ справиться с этим – использовать библиотеку terminfo . Это намного проще, чем помнить эвакуационные коды и, как правило, менее подвержены ошибкам. (Это также терминально-агностик, но я подозреваю, что вряд ли вы будете использовать терминальное устройство, отличное от ANSI, в эти дни.)

 # Use reversed colours tput smso echo hello, world tput rmso 

Вы даже можете программно ввести коды в переменные, например

 smso=$(tput smso) rmso=$(tput rmso) echo "${smso}Hello again${rmso}" 

Есть также элементы управления цветом, используя tput setf {colour} и tput setb {colour} . (Поиск man terminfo для «Обработка цвета».) Это более сложно, поэтому я стараюсь использовать небольшой скрипт для их обработки

 colour blue yellow echo this is blue on yellow 

Вот сценарий

 #!/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 
  • Механизм символа BELL '\ a'?
  • Как настроить систему, чтобы не слышать звук символа escape?
  • Почему тире расширяется \\\\ по-разному до bash?
  • Почему эхо игнорирует мои кавычки?
  • Почему не выводится текст, отправленный в эхо?
  • echo string >> файл не работает
  • Bash - синтаксис в эхом
  • Выделение строки без кавычек
  • Почему оболочки выполняют собственные команды «эхо» внутри?
  • эхо-файл в виде отдельной строки с \ n
  • Транспортировка данных в FIFO с помощью EOFs каждую секунду
  • Linux и Unix - лучшая ОС в мире.