Лучший способ решить эту проблему — использовать библиотеку 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
Зеркальные репозитории Arch Linux часто удаляют пакеты не самой последней версии. Arch также не поддерживает частичные обновления системы, так что, если быть точным, вам нужно:
pacman -Syu
, чтобы обновить все, включая список доступных пакетов и версию, затем:
pacman -S <package>