Как получить противоположный фон с помощью echo

Не уверен, что это сработает для вас, но мне удалось подключить карту к виртуальной машине Kali через Vmware Direct I/O passthrough. Я использую Esxi 6.5, на котором работает моя Kali.

0
03.07.2017, 06:33
2 ответа

Лучший способ решить эту проблему — использовать библиотеку terminfo. Это намного, намного проще, чем запоминать escape-коды, и, как правило, менее подвержено ошибкам. (Он также не зависит от терминала, но я подозреваю, что в наши дни маловероятно, что вы будете использовать терминальное устройство, не -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
0
28.01.2020, 02:25

\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

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

2
28.01.2020, 02:25

Теги

Похожие вопросы