Иногда для собственных скриптов бывает удобно сделать цветной вывод текста - для выделения важных моментов и удобства чтения. Средствами bash сделать это можно несколькими путями, я выбрал для себя наиболее удобный и элегантный.
Цветной вывод
Мне часто бывает нужно выделять определенные строки цветом, так что я просто создал файл /etc/colors следующего содержания:#!/bin/sh
c_std="[0;39m"
c_h_std="[1;37m"
c_pink="[0;35m"
c_h_pink="[1;35m"
c_red="[0;31m"
c_h_red="[1;31m"
c_cayan="[0;36m"
c_h_cayan="[1;36m"
c_yellow="[1;33m"
c_green="[0;32m"
c_h_green="[1;32m"
c_blue="[0;34m"
c_h_blue="[1;34m"
В нем задаются переменные, хранящие в себе соответствующие своим названиям цвета. Так, например, "c_std" - стандартный цвет текста в терминале; "c_h_std" - он же, но более "жирное" начертание, и т.д.
Этот файл можно использовать в скриптах для цветного вывода. Например:#!/bin/bash
. /etc/colors
echo "${c_green}Это зеленый цвет${c_std}"
Цветное приглашение bash
Здесь в принципе идея та же, только у меня цвета прописаны в самом bashrc - так уж повелось. Приведу часть своего basrc, отвечающую за приглашение, там все и так довольно очевидно:bash_prompt() {
local NONE="\[\033[0m\]" # unsets color to term's fg color
# regular colors
local K="\[\033[0;30m\]" # black
local R="\[\033[0;31m\]" # red
local G="\[\033[0;32m\]" # green
local Y="\[\033[0;33m\]" # yellow
local B="\[\033[0;34m\]" # blue
local M="\[\033[0;35m\]" # magenta
local C="\[\033[0;36m\]" # cyan
local W="\[\033[0;37m\]" # white
# emphasized (bolded) colors
local EMK="\[\033[1;30m\]"
local EMR="\[\033[1;31m\]"
local EMG="\[\033[1;32m\]"
local EMY="\[\033[1;33m\]"
local EMB="\[\033[1;34m\]"
local EMM="\[\033[1;35m\]"
local EMC="\[\033[1;36m\]"
local EMW="\[\033[1;37m\]"
# background colors
local BGK="\[\033[40m\]"
local BGR="\[\033[41m\]"
local BGG="\[\033[42m\]"
local BGY="\[\033[43m\]"
local BGB="\[\033[44m\]"
local BGM="\[\033[45m\]"
local BGC="\[\033[46m\]"
local BGW="\[\033[47m\]"
case $TERM in
xterm*|rxvt*)
if [ `echo $SSH_CLIENT | wc -c` -gt 1 ]; then SSH_FLAG=1; fi
if [ `/usr/bin/whoami` = "root" ]; then ROOT_FLAG=1; fi
if ([ "$SSH_FLAG" = 1 ] && [ "$ROOT_FLAG" = 1 ]); then
local TITLEBAR='\[\033]0;[SSH] \u@\h\007\]'
PS1="$TITLEBAR${R}[!] ${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
elif [ "$SSH_FLAG" = 1 ]; then
local TITLEBAR='\[\033]0;[SSH] \u@\h\007\]'
PS1="$TITLEBAR${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
elif [ "$ROOT_FLAG" = 1 ]; then
local TITLEBAR='\[\033]0;\u@\h\007\]'
PS1="$TITLEBAR${R}[!] ${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
else
local TITLEBAR='\[\033]0;\u@\h\007\]'
PS1="$TITLEBAR${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
fi
;;
*)
if [ `/usr/bin/whoami` = "root" ]; then ROOT_FLAG=1; fi
if [ "$ROOT_FLAG" = 1 ]; then
PS1="$TITLEBAR${R}[!] ${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
else
PS1="$TITLEBAR${G}\u${Y}@\h ${W}at ${C}\W ${W}>:/ "
fi
;;
esac
}
bash_prompt
Внимательный читатель заметит, что также присутствует проверка на то, является ли текущая сессия сессией ssh и/или рутовой сессией. Соответственно устанавливаются флаги SSH_FLAG и ROOT_FLAG и определенным образом меняется приглашение. Пример:
5 окт. 2008 г.
Цветной вывод в bash
Подписаться на:
Комментарии к сообщению (Atom)
4 комментария:
это что за символ?
Всем привет
Большое спасибо за информацию, очень спасло. Вы представляете хороший сайтик с адекватной статистикой =)
Задумываюсь о покупке сообщения на этом портале. дешево такси www.taxisat.ru (Москва) Внизу и можно справа в топиках. Ну или каких-нибудь других видных рекламных условий.
Возможно по тематике вашего сайта подойдёт для рекламы сайт перепланировка квартир www.buro-pereplanirovok.ru для этого проекта могу заказать более дорогостоящие статьи и обзоры.
Поясните, где заказать, какие правила тут?
Хочу длительное время размещать рекламные места, платные темы и др. надеюсь эти сайты подойдут для вашей цены.
Я покупала банеры на разных порталах всего за 3900 руб. в месяц за статьи.
Я предлогаю 80$ в месяц за 1 банер вверху
Ещё рассмотрю предложения по [b]заказу[/b] и покупке статей на вашем сайте. Куплю дорого!
P.S. Очень надеюсь на выгодное долгосрочное сотрудничество. Большое спасибо, жду ваших электронных ответов желательно с требованиями и ценами.
Поздравляю вас Старо-Новым годом, желаю вам в новом году успехов и спасибо что вы находите время поддерживать ваш замечательный блог!
Приятно удивился некой "красоте", аккуратности решения.
Для ещё большей лени в /etc/colors можно определить функции наподобие:
green(){
echo "${c_green}$@${c_std}"
}
И потом использовать так:
green "Зелёный цвет";
Отправить комментарий