Это портативно, т.е. работает с любым POSIX совместимая оболочка, не требует, чтобы текущий каталог был перезаписываем, и позволяет несколько сценариев с помощью того же приема для выполнения одновременно.
(foo;echo $?>/tmp/_$$)|(bar;exit $(cat /tmp/_$$;rm /tmp/_$$))
Править: вот более сильная версия после комментариев Gilles:
(s=/tmp/.$$_$RANDOM;((foo;echo $?>$s)|(bar)); exit $(cat $s;rm $s))
Edit2: и вот немного более легкий вариант после комментария dubiousjim:
(s=/tmp/.$$_$RANDOM;{foo;echo $?>$s;}|bar; exit $(cat $s;rm $s))
Вот несколько вещей, которые можно сделать:
Редакторы + код
У большого количества редакторов есть поддержка подсветки синтаксиса. vim
и emacs
имейте его на по умолчанию. Можно также включить его под nano
.
Вы можете также код выделения синтаксиса терминала при помощи Pygments как инструмент командной строки.
grep
grep --color=auto
выделения все соответствия. Можно также использовать export GREP_OPTIONS='--color=auto'
сделать это персистентным без псевдонима. Если Вы используете --color=always
, это будет использовать цвет, передавая по каналу, который путает вещи.
ls
ls --color=always
Цвета, указанные:
export LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33'
(подсказка: dircolors
может быть полезным),
PS1
Можно установить PS1 (приглашение оболочки) использовать цвета. Например:
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
Произведет PS1 как:
[желтый] lucas@ubuntu: [красный] ~ [нормальный] $
Можно стать действительно творческими с этим. Как идея:
PS1='\e[s\e[0;0H\e[1;33m\h \t\n\e[1;32mThis is my computer\e[u[\u@\h: \w]\$ '
Помещает панель наверху Вашего терминала с некоторой случайной информацией (Для лучших результатов, также используйте alias clear="echo -e '\e[2J\n\n'"
.)
Избавление от escape-последовательностей
Если что-то застревает, производя цвет, когда Вы не хотите его к, я использую это sed
строка для разделения escape-последовательностей:
sed "s/\[^[[0-9;]*[a-zA-Z]//gi"
Если Вы хотите более подлинный опыт, можно также избавиться от строк, запускающихся с \e[8m
, который дает терминалу команду скрывать текст. (Не широко поддерживаемый.)
sed "s/^\[^[8m.*$//gi"
Также обратите внимание, что те ^ [s должны быть фактическим, литеральным ^ [s. Можно ввести их путем нажатия ^V^ [в ударе, который является Ctrl + V, Ctrl + [.
Существует хороший инструмент для установки Ваших цветов для команды ls - http://geoff.greer.fm/lscolors/
Установите полужирную/цветную подсказку. Из cyberciti.biz и BashFAQ
# 'tput bold' will work regardless of the foreground and background colors.
# Place the tput output into variables, so they are only execd once.
bold=$(tput bold) # This could also be a color.
reset=$(tput sgr0)
export PS1="\u@\[$bold\]\h\[$reset\]:\w \$ "
Мне также удалось найти настройки цветов, которые широко поддерживаются, и которые не печатают символы напыщенности речи в более старых средах (даже FreeBSD4!), и, кажется, хорошо работает, если TERM=vt100, xterm, xterm-окрашивают. (По большей части). От моего .bashrc:
# Set some options, based on the OS
OS=`uname -s`
case "$OS" in
"SunOS" )
# Solaris ls doesn't allow color, so use special characters
LS_OPTS='-F'
alias ls='ls ${LS_OPTS}'
;;
"Linux" )
# GNU ls supports colors!
# See dircolors to customize colors
export LS_OPTS='--color=auto'
alias ls='ls ${LS_OPTS}'
# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"
# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP
export GREP_OPTIONS="--color=auto"
;;
"Darwin"|"FreeBSD")
# Most FreeBSD & Apple Darwin supports colors
export CLICOLOR=true
# Get color support for 'less'
export LESS="--RAW-CONTROL-CHARS"
# Use colors for less, man, etc.
[[ -f ~/.LESS_TERMCAP ]] && . ~/.LESS_TERMCAP
export GREP_OPTIONS="--color=auto"
;;
* )
echo "Unknown OS [$OS]"
;;
esac
grep
и ls
были уже упомянуты, если Вы хотите намного больше выезда цветов Универсальный Coloriser, его начальная цель была к colorize файлам журнала, но прямо из поля он также colorizes ping
, traceroute
, gcc
, make
, netstat
, diff
, last
, ldap
, и cvs
.
Это легко расширяется, если Вы знаете regexes. Я добавил ps
и nmap
к списку (если Вы входите grc
Я буду более, чем рад совместно использовать .conf файлы для тех двух инструментов),
(Btw, для установки его через synaptic
, pacman
, и одинаково у Вас могла бы быть лучшая удача при поиске "grc"),
grc
теперь поддержки ps
по умолчанию. Я интересовался бы Вашим nmap
окраски. См. также мой ответ для искажения всех их способом, которые поглотят новые команды, когда Вы обновите grc.
– Adam Katz
13.01.2015, 05:05
Я также использую:
export TERM=xterm-color
export GREP_OPTIONS='--color=auto' GREP_COLOR='1;32'
export CLICOLOR=1
export LSCOLORS=ExFxCxDxBxegedabagacad
И если Вам нравится колоризация Ваша подсказка, определенная, цветной Вар может быть полезным:
export COLOR_NC='\e[0m' # No Color
export COLOR_WHITE='\e[1;37m'
export COLOR_BLACK='\e[0;30m'
export COLOR_BLUE='\e[0;34m'
export COLOR_LIGHT_BLUE='\e[1;34m'
export COLOR_GREEN='\e[0;32m'
export COLOR_LIGHT_GREEN='\e[1;32m'
export COLOR_CYAN='\e[0;36m'
export COLOR_LIGHT_CYAN='\e[1;36m'
export COLOR_RED='\e[0;31m'
export COLOR_LIGHT_RED='\e[1;31m'
export COLOR_PURPLE='\e[0;35m'
export COLOR_LIGHT_PURPLE='\e[1;35m'
export COLOR_BROWN='\e[0;33m'
export COLOR_YELLOW='\e[1;33m'
export COLOR_GRAY='\e[0;30m'
export COLOR_LIGHT_GRAY='\e[0;37m'
И затем моя подсказка - что-то вроде этого:
case $TERM in
xterm*|rxvt*)
local TITLEBAR='\[\033]0;\u ${NEW_PWD}\007\]'
;;
*)
local TITLEBAR=""
;;
esac
local UC=$COLOR_WHITE # user's color
[ $UID -eq "0" ] && UC=$COLOR_RED # root's color
PS1="$TITLEBAR\n\[${UC}\]\u \[${COLOR_LIGHT_BLUE}\]\${PWD} \[${COLOR_BLACK}\]\$(vcprompt) \n\[${COLOR_LIGHT_GREEN}\]→\[${COLOR_NC}\] "
$ (vcprompt) называет сценарий Python в моем ~/sbin, который печатает информацию об управлении версиями о текущем пути. Это включает поддержку Подвижного, Мерзавца, Svn, Cvs, и т.д. У автора сценария есть источник здесь.
Это - полный источник моей быстрой конфигурации:
$LSCOLORS
и $CLICOLOR
для BSD ls. GNU ls (Linux) использование $LS_COLORS
с другим синтаксисом. Поскольку GNU чувствует себя подобно домой мне, я использую LSCOLORS=exgxfxDacxBaBaCaCaeaEa
подражать цветам GNU на BSD.
– Adam Katz
13.01.2015, 00:22
grep: warning: GREP_OPTIONS is deprecated; please use an alias or script
– Steven Almeroth
23.11.2016, 23:19
Некоторое текстовое художественное оформление (полужирное) для легкой дифференциации между корневой и некорневой оболочкой. Для Zsh:
if test $UID = 0
then PS1="%B${PS1}%b "
fi
Для Bash:
if test $UID = 0
then PS1="\033[1m${PS1}\033[0m"
fi
bash
.
– manatwork
26.01.2012, 11:21
Можно попробовать проект, который помогает на выводе сценариев колоризации также, его именованном ScriptEchoColor в исходном штамповочном прессе: http://scriptechocolor.sourceforge.net/
напр.:
echoc "@{lr}text output in light red"
echoc "@{bLGu}text outpus in blue, light green background and underlined"
echoc "you @{lr} can @{bLGu} mix @{-a} it all too"
echoc -x "ls" #executes ls command and colorizes it automatically to be easy to be seen
Автоматические цвета настраиваются.
Это - пример, сделанный с ним:
Я просто задался вопросом то же самое. У меня есть свой собственный подход, но я ищу альтернативы.
Я пишу обертки удара вокруг вызовов программы и передаю их вывод по каналу хотя sed
. Что я люблю приблизительно sed
это, это изменит и повторит каждую строку сразу же => не много буферизации. Однако мне не нравится это для каждого вызова к перенесенной программе sed
код анализируется и компилируется.
Например, это - то, что я делаю для окраски вывода ip
:
#
# Colorcodes
#
NORMAL=`echo -e '\033[0m'`
RED=`echo -e '\033[31m'`
GREEN=`echo -e '\033[0;32m'`
LGREEN=`echo -e '\033[1;32m'`
BLUE=`echo -e '\033[0;34m'`
LBLUE=`echo -e '\033[1;34m'`
YELLOW=`echo -e '\033[0;33m'`
#
# command: ip
# highlight ip addresses, default route and interface names
#
IP4=$GREEN
IP6=$LBLUE
IFACE=${YELLOW}
DEFAULT_ROUTE=$LBLUE
IP_CMD=$(which ip)
function colored_ip()
{
${IP_CMD} $@ | sed \
-e "s/inet [^ ]\+ /${IP4}&${NORMAL}/g"\
-e "s/inet6 [^ ]\+ /${IP6}&${NORMAL}/g"\
-e "s/^default via .*$/${DEFAULT_ROUTE}&${NORMAL}/"\
-e "s/^\([0-9]\+: \+\)\([^ \t]\+\)/\1${IFACE}\2${NORMAL}/"
}
alias ip='colored_ip'
Цвета для страниц ( ( Подробнее ):
function _colorman() {
env \
LESS_TERMCAP_mb=$(printf "\e[1;35m") \
LESS_TERMCAP_md=$(printf "\e[1;34m") \
LESS_TERMCAP_me=$(printf "\e[0m") \
LESS_TERMCAP_se=$(printf "\e[0m") \
LESS_TERMCAP_so=$(printf "\e[7;40m") \
LESS_TERMCAP_ue=$(printf "\e[0m") \
LESS_TERMCAP_us=$(printf "\e[1;33m") \
"$@"
}
function man() { _colorman man "$@"; }
function perldoc() { command perldoc -n less "$@" |man -l -; }
Цвета для GREP ( 1;
Ярко-зеленый, см. Другие сообщения здесь для других цветов):
GREP_OPTS='--color=auto' # for aliases since $GREP_OPTIONS is deprecated
GREP_COLOR='1;32' # (legacy) bright green rather than default red
GREP_COLORS="ms=$GREP_COLOR" # (new) Matching text in Selected line = green
alias grep='grep $GREP_OPTS'
alias egrep='egrep $GREP_OPTS'
alias fgrep='fgrep $GREP_OPTS'
Больше цветов для GNU LS :
# use the config at ~/.dircolors if it exists, otherwise generate anew
eval "$( dircolors --sh $(ls -d ~/.dircolors 2>/dev/null) )"
# Usage: _ls_colors_add BASE NEW [NEW...]
# Have LS color given NEW extensions the way BASE extension is colored
_ls_colors_add() {
local BASE_COLOR="${LS_COLORS##*:?.$1=}" NEW
if [ "$LS_COLORS" != "$BASE_COLOR" ]; then
BASE_COLOR="${BASE_COLOR%%:*}"
shift
for NEW in "$@"; do
if [ "$LS_COLORS" = "${LS_COLORS#*.$NEW=}" ]; then
LS_COLORS="${LS_COLORS%%:}:*.$NEW=$BASE_COLOR:"
fi
done
fi
export LS_COLORS
}
_ls_colors_add zip jar xpi # archives
_ls_colors_add jpg ico JPG PNG webp # images
_ls_colors_add ogg opus # audio (opus now included by default)
CLICOLOR=1 # BSD auto-color trigger (like ls -G but for everything)
if ls -ld --color=auto / >/dev/null 2>&1
then alias ls="ls -ph --color=auto"
else alias ls="ls -ph"
fi
Установить GRC
( GREAL Colouriser ) И добавьте его на псевдонимы:
# using this as a variable allows easier calling down lower
export GRC='grc -es --colour=auto'
# loop through known commands plus all those with named conf files
for cmd in g++ head ld ping6 tail traceroute6 `locate grc/conf.`; do
cmd="${cmd##*grc/conf.}" # we want just the command
# if the command exists, alias it to pass through grc
type "$cmd" >/dev/null 2>&1 && alias "$cmd"="$GRC $cmd"
done
# This needs run-time detection. We even fake the 'command not found' error.
configure() {
if [[ -x ./configure ]]; then
colourify ./configure "$@"
else
echo "configure: command not found" >&2
return 127
fi
}
# GRC plus LS awesomeness (assumes you have an alias for ls)
unalias ll 2>/dev/null
if ls -ld --color=always / >/dev/null 2>&1; then GNU_LS="--color=always"; fi
ll() {
if [[ -t 1 ]] || [[ -n "$CLICOLOR_FORCE" ]]
then colourify ls -l $GNU_LS "$@"
else ls -l "$@"
fi
}
Цвета для diff : слишком много контента для функции, используйте сценарий и псевдоним в вашем файле RC (ненужные, если вы установили GRC
):
#!/usr/bin/perl
use strict;
use warnings;
open (DIFF, "-|", "diff", @ARGV) or die $!;
my $ydiff = 1;
while (<DIFF>) {
if (not -t 1) {
print;
next;
}
chomp;
$ydiff = 0 if /^[ <>\@+-]/ or ($. == 1 && /^\d+[a-z]{1,5}\d+$/);
my $color = "";
if (! $ydiff && /^[\@+-<>]/) {
$color = (/^[<-](?!--$)/ ? 1 : /^[+>]/ ? 2 : 5);
} elsif ($ydiff && /\t {6}([<|>])(?:\t|$)/) {
$color = ($1 eq "<" ? 1 : $1 eq ">" ? 2 : 4);
}
$color ? printf ("\e[1;3%dm%s\e[0;0m\n",$color,$_) : print "$_\n";
}
close DIFF;
Цвета для Pash Prompt :
# Shorten home dir, cygwin drives, paths that are too long
if [ -d /cygdrive ] && uname -a |grep -qi cygwin; then CYGWIN_OS=1; fi
function PSWD() {
local p="$*" space A B cols="${COLUMNS:-`tput cols 2>/dev/null || echo 80`}"
p="${p/$HOME/\~}" # shrink home down to a tilde
if [ -n "$CYGWIN_OS" ] && [ "${p#/cygdrive/?/}" != "$p" ]; then
p="${p:10:1}:${p:11}" # /cygdrive/c/hi -> c:/hi
fi
space="$((${#USER}+${#HOSTNAME}+6))" # width w/out the path
if [ "$cols" -lt 60 ]; then echo -n "$N "; space=-29; p="$p$N\b"; fi
if [ "$cols" -lt "$((space+${#p}+20))" ]; then # < 20 chars for the command
A=$(( (cols-20-space)/4 )) # a quarter of the space (-20 for cmd)
if [ $A -lt 4 ]; then A=4; fi # 4+ chars from beginning
B=$(( cols-20-space-A*2 )) # half (plus rounding) of the space
if [ $B -lt 8 ]; then B=8; fi # 8+ chars from end
p="${p:0:$A}..${p: -$B}"
fi
echo "$p"
}
PSC() { echo -ne "\[\033[${1:-0;38}m\]"; }
PR="0;32" # default color used in prompt is green
if [ "$(id -u)" = 0 ]; then
sudo=41 # root is red background
elif [ "$USER" != "${SUDO_USER:-$USER}" ]; then
sudo=31 # not root, not self: red text
else sudo="$PR" # standard user color
fi
PROMPT_COMMAND='[ $? = 0 ] && PS1=${PS1[1]} || PS1=${PS1[2]}'
PSbase="$(PSC $sudo)\u$(PSC $PR)@\h $(PSC 33)\$(PSWD \w)"
PS1[1]="$PSbase$(PSC $PR)\$ $(PSC)"
PS1[2]="$PSbase$(PSC 31)\$ $(PSC)"
PS1="${PS1[1]}"
unset sudo PR PSbase
Я утолкнул мой .bashrc в течение многих лет, чтобы работать на ОСХ и Ubuntu.
Я также уменьшил его размером до 28 строк с компактными утверждениями.
С этим моим подсказкой PS1 выглядит:
Со временем в красном, имени пользователя в зеленом, имени машины в светло-голубом, PWD в темнее синей и гидромагнитной ветви в желтом.
Особенность моей подсказки PS1:
_
между чем тогда (это PWD SED
часть местоположения). Соответствующие линии из моих .bashrc
.bashrc
файл:
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
для Ls с цветами, когда доступны и без ошибок, когда нет (т.е. osx):
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
Значение umask
, установленное в сеансе, не влияет на cron
. (Фактически, каждый сеанс может иметь различную маску
.) Необходимо установить umask
в начале сценария, выполняемого cron
.
Каталог (как и любой файл) не определяется его именем. Укажите имя в качестве адреса каталога. Когда вы перемещаете каталог, это все тот же каталог, так же, как если вы переезжаете в другой дом, вы все тот же человек. Если вы удаляете каталог и создаете новый по тому же имени, это новый каталог, как и тот, кто переезжает в дом, где вы жили, это не вы.
Каждый процесс имеет рабочий каталог . Команда cd
в оболочке изменяет текущий рабочий каталог оболочки. Команда pwd
используется для вывода на печать в текущей рабочей директории пути, указанного в параметре start.
Когда вы удалили каталог A, это было сделано, чтобы удалить запись для A в родительском каталоге. Сам каталог A остался в файловой системе, но в отсоединенном состоянии, без имени. Он еще не был удален, поскольку используется процессом, а именно первой оболочкой. При изменении каталога в первой оболочке каталог был окончательно удален. То же самое происходит, когда файл удаляется, в то время как процесс все еще открывает его: запись в каталоге файла удаляется немедленно, а сам файл удаляется, когда он перестает использоваться.
Также обратите внимание на то, что происходит при перемещении каталогов.
mkdir one two
touch one/1 two/2
cd one
ls
В другой оболочке:
mv one tmp
mv two one
mv tmp two
В первой оболочке:
ls
файл 1
находится в каталоге, который первоначально назывался один
и теперь называется два
. Файл 2
находится в каталоге, который первоначально назывался два
и теперь называется один
.
start Точнее, путь , который не может быть уникальным, если задействованы символические ссылки или другие тонкости.
-121--31743-Для установки подсказки в файле .bashrc есть.
#Set variables for foreground colors
fgRed=$(tput setaf 1) ; fgGreen=$(tput setaf 2) ; fgBlue=$(tput setaf 4)
fgMagenta=$(tput setaf 5) ; fgYellow=$(tput setaf 3) ; fgCyan=$(tput setaf 6)
fgWhite=$(tput setaf 7) ; fgBlack=$(tput setaf 0)
#Set variables for background colors
bgRed=$(tput setab 1) ; bgGreen=$(tput setab 2) ; bgBlue=$(tput setab 4)
bgMagenta=$(tput setab 5) ; bgYellow=$(tput setab 3) ; bgCyan=$(tput setab 6)
bgWhite=$(tput setab 7) ; bgBlack=$(tput setab 0)
#Set variables for font weight and text decoration
B=$(tput bold) ; U=$(tput smul) ; C=$(tput sgr0)
#NOTE: ${C} clears the current formatting
if [[ $USER = "root" ]]; then
PS1="${B}${fgRed}\u${C}@\h(\s): ${fgGreen}\w${C} > "
else
PS1="${B}${fgCyan}\u${C}@\h(\s): ${fgGreen}\w${C} > "
fi
Это дает мне подсказку, которая выглядит примерно так:
user@host(bash): ~/bin >
Рабочий каталог имеет зеленый цвет. И имя пользователя полужирное и голубое, если я не запустил оболочку с sudo
, в этом случае имя пользователя ("root") отображается полужирным и красным цветом.
Мне лично очень нравится, чтобы управляющие символы форматирования хранились в переменных, потому что это облегчает чтение кода для установки подсказки. Это также значительно упрощает редактирование подсказки .
Причина, по которой я использую tput
, заключается в том, что предполагается, что он более универсально поддерживается, чем странные последовательности 033 [01; 31m\]
. Кроме того, в качестве дополнительного бонуса, если вы делаете эхо $ PS1
в приглашении, вы увидите необработанное приглашение с цветами вместо этих невразумительных управляющих последовательностей.
Предлагаю вам ознакомиться с ZSH и его плагином oh--my-zsh, который имеет одну из самых мощных консольных функций, которые я видел. Одна из них - выбор темы для вашего терминала. Это пример моей темы... В tty цвета не такие теплые, но они такие же, как на этой картинке... Как бы вам это не понравилось!
Отличный универсальный инструмент Python для раскрашивания вывода команд - это ' colout '
Вы задаете ему регулярное выражение с N группами, за которым следует список, разделенный запятыми. из N цветов. Любой текст, соответствующий группе, будет отображаться соответствующим цветом.
Так, например, если вы смотрите на какой-то тестовый результат:
python -m unittest discover -v
, вы можете украсить его с помощью:
python -m unittest discover -v 2>&1 | colout '(.*ERROR$)|(.*FAIL$)|(\(.*\))' red,yellow,black bold
Посмотрите, как в моем регулярном выражении три группы (круглые скобки), за которыми следуют три цвета (и, возможно, три стили, но я использовал сокращение, чтобы установить все цвета на «полужирный», поэтому группа «черный», которая соответствует тексту в скобках, получается темно-серой.)
Обратите внимание также на то, как мне пришлось добавить 2> & 1
до конца вызова Python, потому что вывод unittest находится на stderr, поэтому я перенес его на stdout, чтобы я мог передать его в colout.
Обычно это настолько просто в использовании, что я часто создаю новые вызовы colout на лету и повторно использую или изменяю их из моей истории командной строки.
Единственным недостатком является то, что он поставляется как пакет Python, а не как отдельный исполняемый файл, поэтому вам нужно установить его с помощью pip или sudo python setup.py install
.
Для просмотра вывода различий в цвете используйте colordiff .
sudo apt-get install colordiff
Передайте любой вывод в формате diff в colordiff:
Сюда входят некоторые из альтернативных форматов diff, например -y
(рядом.)
В качестве альтернативы, если запускается автономно (без что-нибудь, помещенное в него), то он действует как оболочка вокруг 'diff' и окрашивает вывод. Следовательно, у меня есть это в моем .bashrc для псевдонима 'diff' в colordiff.
# if colordiff is installed, use it
if type colordiff &>/dev/null ; then
alias diff=colordiff
Я считаю Solarized полезным. Это аккуратный проект с однородными цветами для множества применений.
http://ethanschoonover.com/solarized https://github.com/altercation/solarized
То, что здесь еще не было сказано:
Раскрасить вывод ваши компиляции с gcc, есть colorgcc от Johannes Schlüter
Для раскрашивания журналов есть multitail
Чтобы раскрасить любой стандартный вывод, я собрал xcol
Я лично использую их из инструмента xcol.
#normal=$(tput sgr0) # normal text
normal=$'\e[0m' # (works better sometimes)
bold=$(tput bold) # make colors bold/bright
red="$bold$(tput setaf 1)" # bright red text
green=$(tput setaf 2) # dim green text
fawn=$(tput setaf 3); beige="$fawn" # dark yellow text
yellow="$bold$fawn" # bright yellow text
darkblue=$(tput setaf 4) # dim blue text
blue="$bold$darkblue" # bright blue text
purple=$(tput setaf 5); magenta="$purple" # magenta text
pink="$bold$purple" # bright magenta text
darkcyan=$(tput setaf 6) # dim cyan text
cyan="$bold$darkcyan" # bright cyan text
gray=$(tput setaf 7) # dim white text
darkgray="$bold"$(tput setaf 0) # bold black = dark gray text
white="$bold$gray" # bright white text
Я использую эти переменные в своих скриптах вот так.
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Мне также нравится эта маленькая функция colorEcho (найдена в Stack Overflow)
function coloredEcho(){
local exp=$1;
local color=$2;
if ! [[ $color =~ '^[0-9]$' ]] ; then
case $(echo $color | tr '[:upper:]' '[:lower:]') in
black) color=0 ;;
red) color=1 ;;
green) color=2 ;;
yellow) color=3 ;;
blue) color=4 ;;
magenta) color=5 ;;
cyan) color=6 ;;
white|*) color=7 ;; # white or invalid color
esac
fi
tput setaf $color;
echo $exp;
tput sgr0;
}
coloredEcho "This text is green" green
Извините, мне не разрешено публиковать больше ссылок
Я использую цветовую обертку .
cw is a non-intrusive real-time ANSI color wrapper for common unix-based commands on GNU/linux. cw is designed to simulate the environment of the commands being executed, so that if a person types 'du', 'df', 'ping', etc. in their shell it will automatically color the output in real-time according to a definition file containing the color format desired. cw has support for wildcard match coloring, tokenized coloring, headers/footers, case scenario coloring, command line dependent definition coloring, and includes over 50 pre-made definition files.
Это почти незаметно, но однажды я обнаружил, что ps в интерактивной оболочке возвращает разные выходные данные, сравнивая ps в канале.
Я хотел бы смиренно прорекламировать мою недавнюю публикацию ta
или textattr , библиотеки и инструмента командной -строки, целью которого является добавление цвета и атрибутов к упростите вывод вашей программы на терминал, транслировав удобочитаемые -спецификации в escape-коды ANSI.
Например:
echo "The Git repo $(ta yellow)${CUR_REPO}$(ta off) is $(ta green)up-to-date$(ta off)"
или еще короче:
echo "The Git repo $(ta y)${CUR_REPO}$(ta f) is $(ta g)up-to-date$(ta f)"
или альтернативный:
tawrite "The Git repo " @y ${CUR_REPO} @f " is " @g up-to-date @f "\n"
даст вам что-то вроде:
В настоящее время эту библиотеку можно использовать на четырех языках C, C++, D и Python, за исключением командной строки из вашей любимой оболочки.
Обратите внимание, что он не раскрашивает автоматически вывод любых других программ. Это скорее утилита, которая поможет вам не запоминать заумные коды.Вам нужно использовать только очевидные названия цветов или их простые сокращения от -до -запомнить rgb cmyk w (hite)(из )f .
Для получения дополнительной информации посетите репозиторий textattr .
Если вы хотите сделать свой vim
красочным, как я, я предлагаю вам выполнить два шага:
key steps in the link:
Edit ~/.vimrc file by typing the command: vi ~/.vimrc
Append the following option:syntax on
Save and close the file
Test it by running vim command: vim foo.sh
Если вы выбрали bash, я рекомендую о, -мой -bash . Если вы выбрали zsh, я рекомендую о -мой -zsh . Оба поддерживают раскрашивание вашего терминала и другой вывод.
Вы можете использовать мой cf для раскрашивания имен файлов в командной строке, это быстрый маленький колоризатор на основе awk -, который работает через конвейеры -раскрашивания имен файлов в Truecolor sRGB.
Он имеет ярко окрашенную конфигурацию по умолчанию и, в отличие от ls, имеет не страдать от снижения производительности при добавлении новых цветов. (ls должен сканировать вся строка LS _COLORS для каждого промаха ).
Чтобы получить потрясающую раскраску diff, вам следует взглянуть наhttps://github.com/dandavison/delta
Вы просто устанавливаете его, а затем добавляете в.gitconfig
[pager]
diff = delta
log = delta
reflog = delta
show = delta
[interactive]
diffFilter = delta --color-only --features=interactive
Затем вы получаете подсветку синтаксиса в ваших различиях
Если вы хотите сделать это с файлами журналов.
tail -f example.log | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"
Пример работы и скриншот ниже:
echo " [timestamp] production.FATAL Some Message\n" \
"[timestamp] production.ERROR Some Message\n" \
"[timestamp] production.WARNING Some Message\n" \
"[timestamp] production.INFO Some Message\n" \
"[timestamp] production.DEBUG Some Message\n" | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"
На Mac распечатывается так:
PS1='\e[33;1m\u@\h: \e[31m\W\e[0m\$ '
. После четвертой обратной косой черты существует лишний x. – Chris 23.05.2013, 10:30\[...\]
или иначе команды во второй строке перезапишут первую строку. PS1 = '[\e [33; 1 м] \u@\h: [\e [31 м] \W\e [0m\$' – yanglifu90 29.08.2013, 22:09