(как обсуждалось в комментариях, вместо этого используйте tput
, если он у вас есть)
Использование оболочки bourne иecho
(встроенной -в )команды, которая понимает escape-последовательность ANSI \e
с опцией -e
:
black() { IFS= ; while read -r line; do echo -e '\e[30m'$line'\e[0m'; done; }
red() { IFS= ; while read -r line; do echo -e '\e[31m'$line'\e[0m'; done; }
green() { IFS= ; while read -r line; do echo -e '\e[32m'$line'\e[0m'; done; }
yellow() { IFS= ; while read -r line; do echo -e '\e[33m'$line'\e[0m'; done; }
blue() { IFS= ; while read -r line; do echo -e '\e[34m'$line'\e[0m'; done; }
purple() { IFS= ; while read -r line; do echo -e '\e[35m'$line'\e[0m'; done; }
cyan() { IFS= ; while read -r line; do echo -e '\e[36m'$line'\e[0m'; done; }
white() { IFS= ; while read -r line; do echo -e '\e[37m'$line'\e[0m'; done; }
echo ' foo\n bar' | red
или более общий сценарий оболочки (, скажем,/usr/local/bin/colorize
):
#!/bin/sh
usage() {
echo 'usage:' >&2
echo ' some-command | colorize {black, red, green, yellow, blue, purple, cyan, white}' >&2
exit 1
}
[ -z "$1" ] && usage
case $1 in
black) color='\e[30m' ;;
red) color='\e[31m' ;;
green) color='\e[32m' ;;
yellow) color='\e[33m' ;;
blue) color='\e[34m' ;;
purple) color='\e[35m' ;;
cyan) color='\e[36m' ;;
white) color='\e[36m' ;;
*) usage ;;
esac
IFS=
while read -r line; do
echo -e $color$line'\e[0m'
done
IFS=
необходим для предотвращения обрезки пробелов (подробности см. в POSIX ).
Прежде всего:Приветствую тебя, юный падаван, за почитание древних путей!
Результаты выглядят по-разному, потому что использовались два разных наборщика (, которые использовали разные шрифты поверх этого ).
При использовании параметра-Tpdf выходные данные обрабатываются для PostScript -, подобного верстальщику(*
)и стандартным шрифтам (Times -Roman, Times -. Используется курсив, символ ). Документ PDF не содержит определений шрифтов, но зависит от средства просмотра PDF, чтобы иметь под рукой необходимые шрифты PostScript. Но обычно программа просмотра и/или принтер имеют только очень «похожие» шрифты, которые могут немного отличаться -, что приводит к незначительным смещениям.
При использовании параметра-Tdvi выходные данные отображаются для набора текста TeX с использованием шрифтов TeX. Результирующий код PDF, созданный dvipdf , включает полные определения шрифтов TeX. Это приводит к увеличению размера выходных файлов, но позволяет избежать дальнейших ошибок, вызванных заменой шрифтов.
Спасибо, что подняли этот интересный вопрос!
*
)Я пишу PostScript-как , потому что я провел некоторое тестирование, и результаты-Tpdf сильно отличаются от-Tps (, чего они не должны ). На самом деле теперь я считаю цель PDF неработающей и предлагаю использовать-Tps , а затем преобразовать файл PostScript в файл PDF )